Javascript AES шифрование
Есть ли библиотека для AES 256-битного шифрования в Javascript?
15 ответов
JSAES - это мощная реализация AES в JavaScript. http://point-at-infinity.org/jsaes/
Вот демонстрационная страница, которая использует slowAES.
slowAES был прост в использовании. Логически разработан. Разумная OO упаковка. Поддерживает ручки и рычаги, такие как IV и режим шифрования. Хорошая совместимость с.NET/C#. Имя издевательское; он называется " медленный AES", потому что он не реализован в C++. Но в моих тестах это было непрактично медленно.
Не хватает режима ЕЦБ. Также отсутствует режим CTR, хотя, я думаю, вы могли бы создать его довольно легко, учитывая режим ECB.
Он ориентирован исключительно на шифрование. Хороший дополнительный класс, который выполняет RFC2898- совместимый вывод ключей на основе пароля, в Javascript, доступен от Anandam. Эта пара библиотек хорошо работает с аналогичными классами.NET. Хорошее взаимодействие. Хотя, в отличие от SlowAES, Javascript PBKDF2 заметно медленнее, чем класс Rfc2898DeriveBytes, при генерации ключей.
Неудивительно, что технически есть хорошее взаимодействие, но ключевым моментом для меня была модель, принятая SlowAES, знакомая и простая в использовании. Я обнаружил, что некоторые другие библиотеки Javascript для AES трудно понять и использовать. Например, в некоторых из них я не смог найти место для установки IV или режим (CBC, ECB и т. Д.). Вещи были не там, где я ожидал. SlowAES не был таким. Свойства были именно там, где я ожидал. Мне было легко подобрать, будучи знакомым с моделями криптографического программирования на Java и.NET.
PBKDF2 от Anandam был не совсем на этом уровне. Он поддерживал только один вызов функции DeriveBytes, поэтому, если вам нужно извлечь ключ и IV из пароля, эта библиотека не будет работать без изменений. Небольшая модификация, и она отлично работает для этой цели.
РЕДАКТИРОВАТЬ: я собрал пример упаковки SlowAES и модифицированной версии Anandam PBKDF2 в компоненты сценариев Windows. Использование этого AES с ключом, полученным из пароля, демонстрирует хорошее взаимодействие с классом.NET RijndaelManaged.
EDIT2: демонстрационная страница показывает, как использовать это шифрование AES с веб-страницы. Использование тех же входных данных (iv, key, mode и т. Д.), Которые поддерживаются в.NET, обеспечивает хорошее взаимодействие с классом.NET Rijndael. Вы можете сделать "просмотр источника", чтобы получить javascript для этой страницы.
EDIT3
последнее добавление: криптография Javascript считается вредной. Стоит прочитать.
В своих поисках шифрования AES я нашел это у некоторых студентов из Стэндфорда. Утверждает, что там быстрее всего. Поддерживает CCM, OCB, GCM и блочное шифрование. http://crypto.stanford.edu/sjcl/
Погуглив "JavaScript AES" нашел несколько примеров. Первый, который появился, предназначен для объяснения алгоритма, а также для предоставления решения:
Этот пост уже устарел, но 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 - это порт crypto-js для node.js
Недавно у меня возникла потребность в некоторой совместимости шифрования / дешифрования между 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: посмотрите на вывод консоли браузера, а также просмотрите исходный код, чтобы получить некоторые подсказки и полезные сообщения о том, что происходит в демоверсии
редактировать: обновлена очень старая и несуществующая ссылка на источник, теперь указывающая на
Судя по собственному опыту, 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 реализовал более раннюю черновую версию стандарта, в которой не использовались обещания.
Некоторые примеры можно найти здесь:
Используйте CryptoJS
Вот код: https://github.com/odedhb/AES-encrypt
А вот рабочий пример в Интернете: https://odedhb.github.io/AES-encrypt/
Попробуйте asmcrypto.js - это действительно быстро.
PS: я автор, и я могу ответить на ваши вопросы, если таковые имеются. Также буду рад получить отзывы:)
Если вы пытаетесь использовать JavaScript, чтобы избежать использования SSL, подумайте еще раз. Существует много промежуточных мер, но только SSL обеспечивает безопасную связь. Библиотеки шифрования Javascript могут помочь в борьбе с определенным набором атак, но не с настоящей атакой "человек посередине".
Если вы ищете SSL для механизма приложений Google в пользовательском домене, загляните на http://wwwizer.com/.
В следующем посте объясняется, как создать попытку защищенной связи с JavaScript и как ошибиться: используйте модуль шифрования JavaScript вместо SSL/HTTPS
Существует также бесплатная библиотека Стэнфорда в качестве альтернативы Cryptojs.
Вот единственное решение, которое сработало для меня:
http://www.hanewin.net/encrypt/aes/aes.htm
Это довольно простой, но простой в использовании и, кажется, работает хорошо.
http://www.movable-type.co.uk/scripts/aes.html библиотека может помочь.
Другое решение с поддержкой AES-256: https://github.com/digitalbazaar/forge