pidCrypt это open source библиотека криптографических алгоритмов. Поддерживает RSA и AES шифрование/дешифрование, и расчёт MD5 и SHA хэшей.
Шифрование (демо)
Декодирование
У меня примеры почему то не работали с той версией библиотеки которая по ссылке «Current version» и я скачал все скрипты непосредственно с тех мест откуда они подключались в примерах
Информацию про шифрование на JavaScript я искал довольно давно когда думал про создание чата с оконечным шифрованием или веб-сервиса заметок с шифрованием текста заметок на стороне клиента. Собственно плагин чата для личной переписки пользователей я сделал и теперь думаю нужна ли в нём функция шифрования сообщений.
Base64
Base64
Пример использования pidCrypt для работы с Base64 (демо)Кодирование Base64 может быть полезно, если в окружении HTTP используется информация, длину которой можно точно определить. Также многим приложениям необходимо кодировать двоичные данные для удобства включения в URL, скрытые поля форм, и здесь Base64 удобно не только для компактного представления, но и относительной нечитаемостью для попытки выяснения случайным человеком-наблюдателем природы данных.
var myString = "This is some text";
//encoding:
var b64encoded = pidCryptUtil.encodeBase64(myString);
//decoding:
var b64decoded = pidCryptUtil.decodeBase64(b64encoded);
AES
Advanced Encryption Standard (AES)
Пример симметричного шифрования AES (демо)Advanced Encryption Standard (AES) — симметричный алгоритм блочного шифрования (размер блока 128 бит, ключ 128/192/256 бит), принятый в качестве стандарта шифрования правительством США по результатам конкурса AES. Этот алгоритм хорошо проанализирован и сейчас широко используется, как это было с его предшественником DES. Национальный институт стандартов и технологий США (англ. National Institute of Standards and Technology, NIST) опубликовал спецификацию AES 26 ноября 2001 года после пятилетнего периода, в ходе которого были созданы и оценены 15 кандидатур. 26 мая 2002 года AES был объявлен стандартом шифрования. По состоянию на 2009 год AES является одним из самых распространённых алгоритмов симметричного шифрования.
var aes = new pidCrypt.AES.CBC();
// Шифрует текст
var crypted = aes.encryptText("Шифруем текст", "password", {nBits: 256});
// Расшифрует текст
var decrypted = aes.decryptText(pidCryptUtil.stripLineFeeds(crypted),"password",{nBits:256});
RSA
RSA — криптографический алгоритм с открытым ключом
К сожалению в библиотеке отсутствует функция создания открытого и закрытого ключей. Поэтому они должны генерироваться какими то другими средствами.RSA — криптографический алгоритм с открытым ключом, основывающийся на вычислительной сложности задачи факторизации больших целых чисел. Криптосистема RSA стала первой системой, пригодной и для шифрования, и для цифровой подписи.
Шифрование (демо)
//new instance
var rsa = new pidCrypt.RSA();
//get the modulus and exponent from certificate (ASN1 parsing)
//pem(Array of Bytes)
var asn = pidCrypt.ASN1.decode(pem);
var tree = asn.toHexTree();
//setting the public key for encryption with retrieved ASN.1 tree
rsa.setPublicKeyFromASN(tree);
//encrypt the plaintext and returns the encrypted text
var crypted = rsa.encrypt();
Декодирование
//new instance
var rsa = new pidCrypt.RSA();
//get the parameters from certificate (ASN1 parsing)
//pem(Array of Bytes)
var asn = pidCrypt.ASN1.decode(pem);
var tree = asn.toHexTree();
//setting the private key for decryption with retrieved ASN.1 tree
rsa.setPrivateKeyFromASN(tree);
//decrypt the crypted text and returns the plaintext
var plain = rsa.decrypt();
У меня примеры почему то не работали с той версией библиотеки которая по ссылке «Current version» и я скачал все скрипты непосредственно с тех мест откуда они подключались в примерах
Примечание
Информацию про шифрование на JavaScript я искал довольно давно когда думал про создание чата с оконечным шифрованием или веб-сервиса заметок с шифрованием текста заметок на стороне клиента. Собственно плагин чата для личной переписки пользователей я сделал и теперь думаю нужна ли в нём функция шифрования сообщений.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
mwizard
Почему sourceforge? Почему перерыв в пять лет между двумя последними версиями? Почему вы считаете эту библиотеку безопасной с точки зрения side-channel атак?
mwizard
Math.floor(65536 * Math.random())
Кхм… Я думаю, эту реализацию CSPRNG можно закапывать.
Levhav
Я не считаю себя специалистом в криптографии. И не заявлял что она безопасна.
Убедительным доказательство считаю что она даёт те же результаты при кодировании AES-CBC что и OpenSSL. И это легко проверить.
mwizard
Это абсолютно неубедительное и, увы, совершенно не доказательство. То, что библиотека выдает те же значения не означает, что в ней нет уязвимостей — например, что шифрование и дешифрование выполняется всегда за одно и то же время для любых комбинаций ключей и открытого текста. Или что вызов garbage collector-а не является причиной наблюдаемых задержек для определенных комбинаций данных. Или что
Math.floor(65536 * Math.random())
— это не самая лучшая реализация CSPRNG. Даже если это потом скормить RC4, это все равно адский шлак.