Чи є в Javascript бібліотека для шифрування 256-бітних AES?
Чи є в Javascript бібліотека для шифрування 256-бітних AES?
Відповіді:
JSAES - це потужна реалізація AES в JavaScript. http://point-at-infinity.org/jsaes/
Ось демонстраційна сторінка, яка використовує slowAES.
slowAES був простий у використанні. Логічно розроблений. Розумна упаковка OO. Підтримує ручки та важелі, такі як режим 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 з пароля, ця бібліотека не працюватиме без змін. Деяка незначна модифікація, і вона працює просто для цієї мети.
EDIT : Я поставив разом приклад пакування SlowAES і модифіковану версію Anandam в PBKDF2 в компоненти сценаріїв Windows. Використання цього AES за допомогою ключа, отриманого паролем, демонструє хорошу взаємодію з класом .NET RijndaelManaged.
EDIT2 : на демонстраційній сторінці показано, як використовувати це шифрування AES з веб-сторінки. Використовуючи ті самі входи (iv, ключ, режим тощо), які підтримуються в .NET, ви добре взаємодієте з класом .NET Rijndael. Ви можете зробити "джерело перегляду", щоб отримати javascript для цієї сторінки.
EDIT3
пізнє доповнення: Криптографія Javascript вважається шкідливою. Варто прочитаного.
У своїх пошуках шифрування AES я знайшов це у деяких студентів Стендфорда. Претендує на те, що найшвидший там. Підтримує шифрування CCM, OCB, GCM та Block. http://crypto.stanford.edu/sjcl/
Гугл "JavaScript AES" знайшов кілька прикладів. Перший, що з’явився, покликаний пояснити алгоритм, а також запропонувати рішення:
Ця публікація тепер стара, але криптовалюта може бути найповнішою бібліотекою шифрування javascript.
CryptoJS - це сукупність криптографічних алгоритмів, реалізованих у JavaScript. До неї відносяться такі цифри: AES-128, AES-192, AES-256, DES, Triple DES, Кролик, RC4, RC4Drop та хешири: MD5, RIPEMD-160, SHA-1, SHA-256, SHA-512, SHA -3 з 224, 256, 384 або 512 бітами.
Ви можете переглянути їх посібник із швидкого запуску, який також є посиланням на наступний порт node.js.
node-cryptojs-aes - порт node.js з крипто-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, що спілкувався з двигуном додатка google, на якому розміщений сервер python, який використовує AES та відкриті ключі та приватні ключі RSA.
Я хоч би включив його сюди за посиланням, якщо це буде корисно іншим, кому потрібно виконати те саме.
http://www.ipowow.com/files/aesrsademo.tar.gz
і перегляньте демонстрацію на rsa-aes-demo DOT appspot DOT com
редагувати: подивіться на вихід консолі браузера, а також перегляньте джерело, щоб отримати підказки та корисні повідомлення про те, що відбувається в демонстраційній версії
редагувати: оновлено дуже старе і неіснуюче посилання на джерело, на яке зараз вказують
Судячи з власного досвіду, 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)
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
Є також Стенфордська безкоштовна ліб як альтернатива Cryptojs
Ще одне рішення з підтримкою AES-256: https://github.com/digitalbazaar/forge
Ось єдине рішення, яке працювало для мене:
http://www.hanewin.net/encrypt/aes/aes.htm
Це досить просто, але просте у використанні і, здається, працює добре.