it-swarm.com.de

Javascript AES-Verschlüsselung

Gibt es eine Bibliothek für die AES-256-Bit-Verschlüsselung in Javascript?

105
coder

JSAES ist eine leistungsstarke Implementierung von AES in JavaScript. http://point-at-infinity.org/jsaes/

63
backslash17

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; er heißt " langsam 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 Nice-Ergänzungsklasse, die RFC2898 - kompatible passwortbasierte Schlüsselableitung in Javascript ausführt, ist erhältlich von Anandam . Dieses Bibliothekspaar funktioniert gut mit den analogen .NET-Klassen. Gutes interop. Im Gegensatz zu SlowAES ist Javascript PBKDF2 beim Generieren von Schlüsseln jedoch merklich langsamer als die Klasse Rfc2898DeriveBytes .

Es ist nicht verwunderlich, dass es technisch gesehen ein gutes Interop gibt, aber der Schlüsselpunkt für mich war, dass das von SlowAES übernommene Modell vertraut und einfach zu bedienen ist. Ich habe festgestellt, dass einige der anderen Javascript-Bibliotheken für AES schwer zu verstehen und zu verwenden sind. Zum Beispiel konnte ich in einigen von ihnen nicht den Ort finden, an dem die IV eingestellt werden konnte, oder den Modus (CBC, EZB usw.). Die Dinge waren nicht so, wie ich es erwartet hatte. SlowAES war nicht so. Die Eigenschaften waren genau dort, wo ich sie erwartet hatte. Es war einfach für mich, mit den Java und .NET Crypto-Programmiermodellen vertraut zu sein.

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 von einem Kennwort ableiten müssen, funktioniert diese Bibliothek unverändert nicht. Einige geringfügige Änderungen, und es funktioniert gut für diesen Zweck.

[~ # ~] edit [~ # ~]: Ich habe ein Beispiel der Verpackung SlowAES und eine modifizierte Version von Anandam zusammengestellt - PBKDF2 in Windows-Skriptkomponenten. Die Verwendung dieses AES mit einem von einem Kennwort abgeleiteten Schlüssel zeigt eine gute Interoperabilität mit der .NET RijndaelManaged-Klasse.

EDIT2: die Demo-Seite zeigt, wie diese AES-Verschlüsselung von einer Webseite verwendet wird. Wenn Sie dieselben in .NET unterstützten Eingaben (iv, key, mode usw.) verwenden, können Sie die .NET Rijndael-Klasse gut verwenden. Sie können eine "Quelltextansicht" erstellen, um das Javascript für diese Seite zu erhalten.

EDIT3
eine späte Ergänzung: Javascript-Kryptographie gilt als schädlich. Lohnt sich zu lesen.

35
Cheeso

Bei meiner Suche nach AES-Verschlüsselung fand ich dies von einigen Standford-Studenten. Behauptet, da draußen am schnellsten zu sein. Unterstützt CCM, OCB, GCM und Blockverschlüsselung. http://crypto.stanford.edu/sjcl/

25
Danny C

Google "JavaScript AES" hat mehrere Beispiele gefunden. Der erste, der auftauchte, soll den Algorithmus erklären und eine Lösung bieten:

Movable Type Scripts: AES

12
Samir Talwar

Dieser Beitrag ist jetzt alt, aber crypto-js ist 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 Hashers: MD5, RIPEMD-160, SHA-1, SHA-256, SHA-512, SHA -3 mit 224, 256, 384 oder 512 Bits.

Vielleicht möchten Sie sich ihre Schnellstartanleitung ansehen, die auch die Referenz für den folgenden node.js-Port ist.

node-cryptojs-aes ist ein node.js-Port von crypto-js

10
marcz

Vor kurzem musste ich einige Verschlüsselungs-/Entschlüsselungsinteroperabilitäten zwischen Javascript und Python 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 habe viele, viele verschiedene Versionen von RSA und AES im Internet gefunden und sie waren alle unterschiedlich in ihrem Ansatz, aber ich habe kein gutes Beispiel für End-to-End-Javascript und python Interoperabilität) gefunden.

Schließlich schaffte ich es, etwas zusammenzubasteln, das meinen Bedürfnissen nach viel Versuch und Irrtum entsprach.

Wie auch immer, ich habe ein Beispiel für eine js/webapp gefunden, die mit einer google app engine gesprochen hat, die python server, der AES und RSA-Zeug mit öffentlichen Schlüsseln und privaten Schlüsseln verwendet.

Ich dachte, ich würde es hier per Link einfügen, falls es für andere von Nutzen sein sollte, die dasselbe tun müssen.

http://www.ipowow.com/files/aesrsademo.tar.gz

und siehe demo bei rsa-aes-demo DOT appspot DOT com

bearbeiten: Schauen Sie sich die Ausgabe der Browserkonsole an und sehen Sie sich auch den Quellcode an, um einige Hinweise und nützliche Meldungen zu erhalten, was in der -Demo vor sich geht.

edit: Sehr alter und nicht mehr funktionierender Link zur Quelle aktualisiert, auf den jetzt verwiesen wird

https://sestertii.com/files/aesrsademo.tar.gz

8
David Kierans

Nach meiner eigenen Erfahrung bietet asmcrypto.js die schnellste AES-Implementierung in JavaScript (insbesondere in Firefox, da asm.js dort voll genutzt werden 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 die verwendet werden primäre Lösung, wenn Sie Wert auf Leistung legen. Beachten Sie, dass IE11 eine frühere Entwurfsversion des Standards implementiert hat, bei der keine Versprechen verwendet wurden.

Einige Beispiele finden Sie hier:

7
Joel Richard

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/

5
Oded Breiner

Versuchen Sie asmcrypto.js - es ist sehr schnell.

PS: Ich bin Autor und kann Ihre Fragen gegebenenfalls beantworten. Ich würde mich auch über Feedback freuen :)

4
vibornoff
1
arun

Es gibt auch eine Stanford-freie Bibliothek als Alternative zu Cryptojs

http://crypto.stanford.edu/sjcl/

1
Jai

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.

1
CpnCrunch

Eine andere Lösung mit AES-256-Unterstützung: https://github.com/digitalbazaar/forge

1
dlongley

Wenn Sie versuchen, Javascript zu verwenden, um die Verwendung von SSL zu vermeiden, überlegen Sie es sich noch einmal. Es gibt viele Maßnahmen auf halbem Weg, aber nur SSL bietet sichere Kommunikation. Javascript-Verschlüsselungsbibliotheken können gegen bestimmte Angriffe helfen, aber nicht gegen echte Man-in-the-Middle-Angriffe.

Wenn Sie in einer benutzerdefinierten Domain nach SSL für die Google App Engine suchen, lesen Sie wwwizer.com .

Im folgenden Beitrag wird erläutert, wie Sie versuchen, eine sichere Kommunikation mit Javascript zu erstellen und wie Sie die Fehlerursache beheben: Verwenden Sie das JavaScript-Verschlüsselungsmodul anstelle von SSL/HTTPS

1
speedplane

http://www.movable-type.co.uk/scripts/aes.html Bibliothek kann eine Hilfe sein.

1
Kirtan