pidCrypt это open source библиотека криптографических алгоритмов. Поддерживает RSA и AES шифрование/дешифрование, и расчёт MD5 и SHA хэшей.

Base64


Base64
Кодирование Base64 может быть полезно, если в окружении HTTP используется информация, длину которой можно точно определить. Также многим приложениям необходимо кодировать двоичные данные для удобства включения в URL, скрытые поля форм, и здесь Base64 удобно не только для компактного представления, но и относительной нечитаемостью для попытки выяснения случайным человеком-наблюдателем природы данных.
Пример использования pidCrypt для работы с Base64 (демо)
var myString = "This is some text";
//encoding:
var b64encoded = pidCryptUtil.encodeBase64(myString);
//decoding:
var b64decoded = pidCryptUtil.decodeBase64(b64encoded);


AES


Advanced Encryption Standard (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 является одним из самых распространённых алгоритмов симметричного шифрования.
Пример симметричного шифрования 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 я искал довольно давно когда думал про создание чата с оконечным шифрованием или веб-сервиса заметок с шифрованием текста заметок на стороне клиента. Собственно плагин чата для личной переписки пользователей я сделал и теперь думаю нужна ли в нём функция шифрования сообщений.
Нужна ли функция шифрования сообщений в чате

Проголосовало 34 человека. Воздержалось 10 человек.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Комментарии (5)


  1. mwizard
    11.12.2015 09:27

    Почему sourceforge? Почему перерыв в пять лет между двумя последними версиями? Почему вы считаете эту библиотеку безопасной с точки зрения side-channel атак?


    1. mwizard
      11.12.2015 09:31
      +1

      Math.floor(65536 * Math.random())

      Кхм… Я думаю, эту реализацию CSPRNG можно закапывать.


    1. Levhav
      11.12.2015 09:32
      -5

      Я не считаю себя специалистом в криптографии. И не заявлял что она безопасна.
      Убедительным доказательство считаю что она даёт те же результаты при кодировании AES-CBC что и OpenSSL. И это легко проверить.


      1. mwizard
        11.12.2015 09:36
        +1

        Это абсолютно неубедительное и, увы, совершенно не доказательство. То, что библиотека выдает те же значения не означает, что в ней нет уязвимостей — например, что шифрование и дешифрование выполняется всегда за одно и то же время для любых комбинаций ключей и открытого текста. Или что вызов garbage collector-а не является причиной наблюдаемых задержек для определенных комбинаций данных. Или что Math.floor(65536 * Math.random()) — это не самая лучшая реализация CSPRNG. Даже если это потом скормить RC4, это все равно адский шлак.


  1. chelaxe
    14.12.2015 07:48

    Пользовался JSEncrypt для RSA и crypto-js для других алгоритмов.