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