cryptico.js

Генерация пары ключаей RSA и строка публичного ключа

Семен хочет отправить Мише зашифрованное сообщение. Чтобы сделать это, ему нужно получить от Миши строку с публичным ключом. Мига генерирует пару ключей следующим образом:
// Фраза пароля, которая используется для генерации ключа RSA.
var PassPhrase = "The Moon is a Harsh Mistress."; 

// Длина ключа RSA в битах.
var Bits = 1024; 

var MattsRSAkey = cryptico.generateRSAKey(PassPhrase, Bits);
Мига генерирует строку публичного ключа:
var MattsPublicKeyString = cryptico.publicKeyString(MattsRSAkey);       
и она выглядит вот так:
uXjrkGqe5WuS7zsTg6Z9DuS8cXLFz38ue+xrFzxrcQJCXtVccCoUFP2qH/AQ
4qMvxxvqkSYBpRm1R5a4/NdQ5ei8sE8gfZEq7dlcR+gOSv3nnS4/CX1n5Z5m
8bvFPF0lSZnYQ23xlyjXTaNacmV0IuZbqWd4j9LfdAKq5dvDaoE=

Шифровка сообщения

Миша отправляет Семену строку публичного ключа. Теперь Семен может зашифровать сообщение для Миши:
var PlainText = "Matt, I need you to help me with my Starcraft strategy.";

var EncryptionResult = cryptico.encrypt(PlainText, MattsPublicKeyString);
EncryptionResult.cipher - зашифрованное сообщение, которое выглядит так:
OOHoAlfm6Viyl7afkUVRoYQv24AfdLnxaay5GjcqpxvEK+dph5kUFZEZIFKo
vVoHoZbtUMekSbMqHQr3wNNpvcNWr4E3DgNLfMZQA1pCAUVmPjNM1ZQmrkKY
HPKvkhmVKaBiYAJGoO/YiFfKnaylLpKOYJZctkZc4wflZcEEqqg=?cJPt71I
HcU5c2LgqGXQKcx2BaAbm25Q2Ku94c933LX5MObL9qbTJEVEv29U0C3gIqcd
qwMV6nl33GtHjyRdHx5fZcon21glUKIbE9P71NwQ=

Дешифровка сообщения

Семан отправляет зашифрованное сообщение Мише. Сообщение может быть расшифрованно так:
var CipherText = "OOHoAlfm6Viyl7afkUVRoYQv24AfdLnxaay5GjcqpxvEK+dph5kUFZEZIFKo \
                  vVoHoZbtUMekSbMqHQr3wNNpvcNWr4E3DgNLfMZQA1pCAUVmPjNM1ZQmrkKY \
                  HPKvkhmVKaBiYAJGoO/YiFfKnaylLpKOYJZctkZc4wflZcEEqqg=?cJPt71I \
                  HcU5c2LgqGXQKcx2BaAbm25Q2Ku94c933LX5MObL9qbTJEVEv29U0C3gIqcd \
                  qwMV6nl33GtHjyRdHx5fZcon21glUKIbE9P71NwQ=";

var DecryptionResult = cryptico.decrypt(CipherText, MattsRSAkey);
Дешифрованное сообщение содержится в строке DecryptionResult.plaintext.

Цифровая подпись и ID публичного ключа

Если Семен передаст свой ключ RSA методу cryptico.encrypt, то зашифрованное сообщение будет подписано данным ключом:
var PassPhrase = "There Ain't No Such Thing As A Free Lunch."; 
var SamsRSAkey = cryptico.generateRSAKey(PassPhrase, 1024);

var PlainText = "Matt, I need you to help me with my Starcraft strategy.";

var EncryptionResult = cryptico.encrypt(PlainText, MattsPublicKeyString, SamsRSAkey);
Публичный ключ, соответсттующий подиси будет находиться в строке DecryptionResult.publicKeyString, которую получит Миша при дешифровке сообщения. Его можно будет сравнить с публичным ключом Семена, чтобы удостовериться, что сообщение написано им. Но публичный ключ состоит из большого количества символов, поэтому удобнее использовать идентификатор публичного ключа:
var PublicKeyID = cryptico.publicKeyID(EncryptionResult.publickey);
а PublicKeyID будет выглядет так:
d0bffb0c422dfa3d3d8502040b915248
Данный короткий ID ключа может буть использован для уникальной идентификации публичного ключа Семена даже в ручном режиме. Кроме того, ID ключа может использоваться для проверки правильности ввода пароля владельцем ключа.