Есть ли библиотека, доступная для 256-битного шифрования AES в Javascript?
Javascript AES-шифрование
Ответ 1
JSAES - мощная реализация AES в JavaScript. http://point-at-infinity.org/jsaes/
Ответ 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/
Ответ 4
Google "AES" нашел несколько примеров. Первый, который появился, предназначен для объяснения алгоритма, а также для решения:
Ответ 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: обновлена очень старая и несуществующая ссылка на источник, чтобы теперь указывать на
Ответ 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: Я автор, и я могу ответить на ваши вопросы, если они есть. Также я был бы рад получить некоторые отзывы:)
Ответ 9
http://www.movable-type.co.uk/scripts/aes.html библиотека может оказать некоторую помощь.
Ответ 10
Ответ 11
Если вы пытаетесь использовать javascript, чтобы избежать использования SSL, подумайте еще раз. Существует много промежуточных мер, но только SSL обеспечивает безопасную связь. Библиотеки шифрования Javascript могут помочь в борьбе с определенным набором атак, но не в истинной атаке "человек в середине".
Если вы ищете SSL для движка Google в пользовательском домене, посмотрите wwwizer.com.
В следующей статье объясняется, как создать попытку безопасной связи с javascript и как это сделать неправильно: Использовать модуль шифрования JavaScript вместо SSL/HTTPS
Ответ 12
В качестве альтернативы Cryptojs
существует также бесплатная версия Stanford lib,Ответ 13
Другое решение с поддержкой AES-256: https://github.com/digitalbazaar/forge
Ответ 14
Вот единственное решение, которое сработало для меня:
http://www.hanewin.net/encrypt/aes/aes.htm
Это довольно простой, но простой в использовании и, кажется, хорошо работает.
Ответ 15
Использовать CryptoJS
Здесь код: https://github.com/odedhb/AES-encrypt
А вот онлайн-рабочий пример: https://odedhb.github.io/AES-encrypt/