Javascript AES-шифрование

Есть ли библиотека, доступная для 256-битного шифрования AES в Javascript?

Ответ 2

Здесь демонстрационная страница, использующая slowAES.

slowAES был прост в использовании. Логически разработан. Разумная упаковка OO. Поддерживает ручки и рычаги, такие как IV и режим шифрования. Хорошая совместимость с .NET/С#. Это имя на щеке; он назвал " медленным AES", потому что он не реализован на С++. Но в моих тестах это было непрактично медленным.

В нем отсутствует режим ECB. Также не хватает режима CTR, хотя вы можете построить один довольно легко, учитывая режим ECB, я думаю.

Он ориентирован исключительно на шифрование. Хороший дополнительный класс, который делает RFC2898 - совместимый вывод на основе пароля, в Javascript, доступный от Anandam. Эта пара библиотек хорошо работает с аналогичными .NET-классами. Хороший друг. Хотя, в отличие от SlowAES, Javascript PBKDF2 заметно медленнее, чем класс Rfc2898DeriveBytes при создании ключей.

Не удивительно, что технически есть хороший друг, но ключевым моментом для меня была модель, принятая SlowAES, знакомая и простая в использовании. Я обнаружил, что некоторые из других Javascript-библиотек для AES трудно понять и использовать. Например, в некоторых из них я не мог найти место для установки IV или режима (CBC, ECB и т.д.). Вещи были не там, где я ожидал их. SlowAES не был таким. Свойства были правы, где я ожидал, что они будут. Мне было легко подобрать, знакомы с моделями крипто программирования Java и .NET.

Анандам PBKDF2 был не совсем на этом уровне. Он поддерживал только один вызов функции DeriveBytes, поэтому, если вам нужно получить ключ и пароль от пароля, эта библиотека не будет работать без изменений. Некоторая небольшая модификация, и она отлично подходит для этой цели.

EDIT: я собрал пример упаковки slowAES и модифицированную версию Anandam PBKDF2 в Windows Script Components. Использование этого AES с ключом, созданным паролем, показывает хороший переход к классу .NET RijndaelManaged.

EDIT2: демонстрационная страница показывает, как использовать это шифрование AES с веб-страницы. Использование одних и тех же входов (iv, key, mode и т.д.), Поддерживаемых в .NET, дает вам хорошее взаимодействие с классом .NET Rijndael. Вы можете создать "источник просмотра", чтобы получить javascript для этой страницы.

EDIT3
последнее дополнение: Javascript Криптография считается вредной. Стоит прочитать.

Ответ 3

В моих поисках шифрования AES я нашел это у некоторых студентов Standford. Утверждается, что он самый быстрый. Поддерживает CCM, OCB, GCM и шифрование блоков. http://crypto.stanford.edu/sjcl/

Ответ 5

Этот пост теперь старый, но crypto-js может быть теперь самой полной библиотекой шифрования javascript.

CryptoJS - это набор криптографических алгоритмов, реализованных в JavaScript. Он включает в себя следующие шифры: AES-128, AES-192, AES-256, DES, Triple DES, Rabbit, RC4, RC4Drop и хосты: MD5, RIPEMD-160, SHA-1, SHA-256, SHA-512, SHA -3 с 224, 256, 384 или 512 бит.

Вы можете посмотреть их Руководство по быстрому запуску, которое также является ссылкой для следующего порта node.js.

node-cryptojs-aes является node.js портом crypto-js

Ответ 6

Недавно мне потребовалась некоторая совместимость между javascript и python для шифрования/дешифрования.

В частности...

1) Использование AES для шифрования в javascript и дешифрования в python (Google App Engine) 2) Использование RSA для шифрования в javascript и дешифрования в python (Google App Engine) 3) Использование pycrypto

Я нашел много и много разных версий RSA и AES, плавающих по сети и все они были разными в своем подходе, но я не нашел хорошего примера взаимозависимости javascript и python от конца до конца.

В конце концов мне удалось собрать то, что соответствовало моим потребностям после многих проб и ошибок.

Как бы то ни было, я сбил пример js/webapp, разговаривая с сервером python с платформой google-приложений, который использует данные AES и открытого ключа и секретного ключа RSA.

Я бы включил его здесь по ссылке, если это будет полезно для других, которым нужно выполнить одно и то же.

http://www.ipowow.com/files/aesrsademo.tar.gz

и см. демонстрацию в rsa-aes-demo DOT appspot DOT com

edit: посмотрите на вывод консоли браузера, а также посмотрите источник, чтобы получить некоторые подсказки и полезные сообщения о том, что происходит в демо

edit: обновлена ​​очень старая и несуществующая ссылка на источник, чтобы теперь указывать на

https://sestertii.com/files/aesrsademo.tar.gz

Ответ 7

Судя по собственному опыту, asmcrypto.js обеспечивает самую быструю реализацию AES в JavaScript (особенно в Firefox, поскольку она может полностью использовать asm.js там).

Из файла readme:

Chrome/31.0
SHA256: 51 MiB/s (9 times faster than SJCL and CryptoJS)
AES-CBC: 47 MiB/s (13 times faster than CryptoJS and 20 times faster than SJCL)

Firefox/26.0
SHA256: 144 MiB/s (5 times faster than CryptoJS and 20 times faster than SJCL)
AES-CBC: 81 MiB/s (3 times faster than CryptoJS and 8 times faster than SJCL)

Изменить: API веб-криптографии теперь реализована в большинстве браузеров и должна использоваться в качестве основного решения, если вы заботитесь о производительности. Имейте в виду, что IE11 реализовал более раннюю версию стандарта, которая не использовала promises.

Некоторые примеры можно найти здесь:

Ответ 8

Попробуйте asmcrypto.js - это очень быстро.

PS: Я автор, и я могу ответить на ваши вопросы, если они есть. Также я был бы рад получить некоторые отзывы:)

Ответ 11

Если вы пытаетесь использовать javascript, чтобы избежать использования SSL, подумайте еще раз. Существует много промежуточных мер, но только SSL обеспечивает безопасную связь. Библиотеки шифрования Javascript могут помочь в борьбе с определенным набором атак, но не в истинной атаке "человек в середине".

Если вы ищете SSL для движка Google в пользовательском домене, посмотрите wwwizer.com.

В следующей статье объясняется, как создать попытку безопасной связи с javascript и как это сделать неправильно: Использовать модуль шифрования JavaScript вместо SSL/HTTPS

Ответ 12

В качестве альтернативы Cryptojs

существует также бесплатная версия Stanford lib,

http://crypto.stanford.edu/sjcl/

Ответ 14

Вот единственное решение, которое сработало для меня:

http://www.hanewin.net/encrypt/aes/aes.htm

Это довольно простой, но простой в использовании и, кажется, хорошо работает.