Gibt es eine Bibliothek für die AES-256-Bit-Verschlüsselung in Javascript?
Gibt es eine Bibliothek für die AES-256-Bit-Verschlüsselung in Javascript?
Antworten:
JSAES ist eine leistungsstarke Implementierung von AES in JavaScript. http://point-at-infinity.org/jsaes/
Hier ist eine Demonstrationsseite , die slowAES verwendet.
slowAES war einfach zu bedienen. Logisch gestaltet. Angemessene OO-Verpackung. Unterstützt Knöpfe und Hebel wie IV und Verschlüsselungsmodus. Gute Kompatibilität mit .NET / C #. Der Name ist ironisch; Es heißt " langsames AES", weil es nicht in C ++ implementiert ist. Aber in meinen Tests war es nicht unpraktisch langsam.
Es fehlt ein EZB-Modus. Es fehlt auch ein CTR-Modus, obwohl man mit einem EZB-Modus ziemlich einfach einen erstellen könnte, denke ich.
Es konzentriert sich ausschließlich auf die Verschlüsselung. Eine nette ergänzende Klasse, die eine RFC2898 - konforme kennwortbasierte Schlüsselableitung in Javascript durchführt, ist bei Anandam erhältlich . Dieses Bibliothekspaar funktioniert gut mit den analogen .NET-Klassen. Gutes Interop. Im Gegensatz zu SlowAES ist das Javascript PBKDF2 beim Generieren von Schlüsseln jedoch deutlich langsamer als die Rfc2898DeriveBytes- Klasse.
Es ist nicht überraschend, dass es technisch gesehen ein gutes Interop gibt, aber der entscheidende Punkt für mich war, dass das von SlowAES übernommene Modell vertraut und einfach zu bedienen ist. Ich fand einige der anderen Javascript-Bibliotheken für AES schwer zu verstehen und zu verwenden. Zum Beispiel konnte ich in einigen von ihnen weder den Ort zum Einstellen der IV noch den Modus (CBC, EZB usw.) finden. Die Dinge waren nicht dort, wo ich sie erwartet hatte. SlowAES war nicht so. Die Eigenschaften waren genau dort, wo ich sie erwartet hatte. Es war für mich leicht zu erlernen, da ich mit den Kryptoprogrammiermodellen Java und .NET vertraut war.
Anandams PBKDF2 war nicht ganz auf diesem Niveau. Es wurde nur ein einziger Aufruf der DeriveBytes-Funktion unterstützt. Wenn Sie also sowohl einen Schlüssel als auch eine IV aus einem Kennwort ableiten müssen, funktioniert diese Bibliothek nicht unverändert. Einige geringfügige Änderungen, und es funktioniert gut für diesen Zweck.
BEARBEITEN : Ich habe ein Beispiel für das Packen von SlowAES und einer modifizierten Version von Anandams PBKDF2 in Windows- Skriptkomponenten zusammengestellt . Die Verwendung dieses AES mit einem vom Kennwort abgeleiteten Schlüssel zeigt eine gute Interaktion mit der .NET RijndaelManaged-Klasse.
EDIT2 : Die Demoseite zeigt, wie diese AES-Verschlüsselung von einer Webseite aus verwendet wird. Wenn Sie dieselben Eingaben (iv, Schlüssel, Modus usw.) verwenden, die in .NET unterstützt werden, können Sie gut mit der .NET Rijndael-Klasse zusammenarbeiten. Sie können eine "Ansichtsquelle" erstellen, um das Javascript für diese Seite abzurufen.
EDIT3
eine späte Ergänzung: Javascript Cryptography gilt als schädlich. Die Lektüre wert.
Bei meiner Suche nach AES-Verschlüsselung habe ich dies von einigen Standford-Studenten gefunden. Behauptet, da draußen am schnellsten zu sein. Unterstützt CCM-, OCB-, GCM- und Blockverschlüsselung. http://crypto.stanford.edu/sjcl/
Das Googeln von "JavaScript AES" hat mehrere Beispiele gefunden. Der erste, der auftauchte, soll den Algorithmus erklären und eine Lösung bieten:
Dieser Beitrag ist jetzt alt, aber die Crypto-Js sind möglicherweise die vollständigste Javascript-Verschlüsselungsbibliothek.
CryptoJS ist eine Sammlung von in JavaScript implementierten kryptografischen Algorithmen. Es enthält die folgenden Chiffren: AES-128, AES-192, AES-256, DES, Triple DES, Kaninchen, RC4, RC4Drop und Hascher: MD5, RIPEMD-160, SHA-1, SHA-256, SHA-512, SHA -3 mit 224, 256, 384 oder 512 Bit.
Sie können auf ihre aussehen wollen Schnellstart - Anleitung , die für die folgenden node.js Port auch die Referenz.
node-cryptojs-aes ist ein node.js-Port von crypto-js
Vor kurzem musste ich eine Interoperabilität zwischen Javascript und Python durch Verschlüsselung / Entschlüsselung durchführen.
Speziell...
1) Verwenden von AES zum Verschlüsseln in Javascript und Entschlüsseln in Python (Google App Engine) 2) Verwenden von RSA zum Verschlüsseln in Javascript und Entschlüsseln in Python (Google App Engine) 3) Verwenden von Pycrypto
Ich fand viele, viele verschiedene Versionen von RSA und AES im Web und sie waren alle unterschiedlich in ihrem Ansatz, aber ich fand kein gutes Beispiel für die End-to-End-Interoperabilität von Javascript und Python.
Schließlich gelang es mir, nach vielen Versuchen und Irrtümern etwas zusammenzubasteln, das meinen Bedürfnissen entsprach.
Wie auch immer, ich habe ein Beispiel für eine js / webapp gefunden, die mit einem von der Google App Engine gehosteten Python-Server spricht, der AES und RSA-Inhalte mit öffentlichem und privatem Schlüssel verwendet.
Ich denke, ich würde es hier per Link einfügen, falls es für andere von Nutzen sein sollte, die das Gleiche erreichen müssen.
http://www.ipowow.com/files/aesrsademo.tar.gz
und siehe Demo bei rsa-aes-demo DOT appspot DOT com
Bearbeiten: Sehen Sie sich die Ausgabe der Browserkonsole an und zeigen Sie die Quelle an, um einige Hinweise und nützliche Meldungen zu erhalten, was in der Demo vor sich geht
Bearbeiten: Aktualisierter sehr alter und nicht mehr funktionierender Link zur Quelle, auf den jetzt verwiesen wird
Nach meiner eigenen Erfahrung zu urteilen, asmcrypto.js die schnellste AES-Implementierung in JavaScript (insbesondere in Firefox, da es dort asm.js voll ausnutzen kann).
Aus der 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)
Bearbeiten: Die Web Cryptography API ist jetzt in den meisten Browsern implementiert und sollte als primäre Lösung verwendet werden, wenn Sie Wert auf Leistung legen. Beachten Sie, dass IE11 einen früheren Entwurf des Standards implementiert hat, in dem keine Versprechen verwendet wurden.
Einige Beispiele finden Sie hier:
Verwenden Sie CryptoJS
Hier ist der Code: https://github.com/odedhb/AES-encrypt
Und hier ist ein Online-Arbeitsbeispiel: https://odedhb.github.io/AES-encrypt/
Versuchen Sie es mit asmcrypto.js es mit - es ist sehr schnell.
PS: Ich bin Autor und kann Ihre Fragen gegebenenfalls beantworten. Auch würde ich mich über Feedback freuen :)
Die Bibliothek http://www.movable-type.co.uk/scripts/aes.html kann hilfreich sein.
Wenn Sie versuchen, Javascript zu verwenden, um die Verwendung von SSL zu vermeiden, denken Sie noch einmal darüber nach. Es gibt viele Maßnahmen auf halbem Weg, aber nur SSL bietet sichere Kommunikation. Javascript-Verschlüsselungsbibliotheken können gegen bestimmte Angriffe helfen, sind jedoch keine echten Man-in-the-Middle-Angriffe.
Wenn Sie nach SSL für die Google App Engine in einer benutzerdefinierten Domain suchen, besuchen Sie wwwizer.com .
Im folgenden Beitrag wird erläutert, wie Sie versuchen, eine sichere Kommunikation mit Javascript herzustellen, und wie Sie Fehler machen: Verwenden Sie das JavaScript-Verschlüsselungsmodul anstelle von SSL / HTTPS
Es gibt auch eine freie Stanford-Bibliothek als Alternative zu Cryptojs
Eine weitere Lösung mit AES-256-Unterstützung: https://github.com/digitalbazaar/forge
Hier ist die einzige Lösung, die für mich funktioniert hat:
http://www.hanewin.net/encrypt/aes/aes.htm
Es ist ziemlich einfach, aber einfach zu bedienen und scheint gut zu funktionieren.