2012-04-08 6 views
3

Ich habe Rijndael 256bit Verschlüsselung in PHP ausgiebig für meine API verwendet und möchte sie für meinen API Wrapper verwenden, der auch in JavaScript geschrieben ist, aber ich konnte keine Lösung finden, die das gleiche Ergebnis wie erreicht in PHP.Gibt es eine JavaScript-Bibliothek, die Rijndael 256-Bit-Verschlüsselung wie PHP?

Wodurch PHP tut meine ich folgendes:

base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256,$password,$secretInformation,MCRYPT_MODE_CBC,$iv)); 

und

base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256,$password,$secretInformation,MCRYPT_MODE_EBC)); 

.. sowie die Entschlüsselungsvarianten.

Ich weiß, dass die vielen 256-Bit-AES-Bibliotheken nicht das gleiche Ergebnis wie PHP mit seiner Rijndael-256bit-Verschlüsselung erreichen, also frage ich mich, ob es eine Bibliothek gibt, die PHP in den obigen Beispielen macht ?

Danke!

+1

Dies würde Ihr Passwort für den Benutzer verfügbar machen, so dass die Verschlüsselung nicht sehr nützlich ist ... –

+0

Was meinst du? – Grumpy

+0

Warum postest du solch einen Link Grumpy? Es ist nicht zum Thema. –

Antwort

1

MCRYPT_RIJNDAEL_256 ist nicht AES mit einem 256-Bit-Schlüssel, es ist im Grunde "AES" mit einer 256-Bit-Blockgröße (AES hat normalerweise eine 128-Bit-Blockgröße). Rinjdael hatte eine Reihe von Optionen und wurde in AES standardisiert, indem diese Optionen auf die Schlüsselgröße 128 oder 256 Bit reduziert wurden. Daher müssen Bibliotheken den Standard (AES) und nicht den Prototyp unterstützen.

Wenn Sie AES 256 oder 128 verwenden möchten, was fast alle Bibliotheken tatsächlich unterstützen, verwenden Sie MCRYPT_RIJNDAEL_128 mit einem 128-Bit- oder 256-Bit-Schlüssel. Der Unterschied in der Blockgröße macht keinen großen Unterschied hinsichtlich der Sicherheit.

Auch ein rohe Passwort als Schlüssel ist eine wirklich sehr schlechte Idee. Sie erhalten Schlüssel von einem Passwort, indem Sie eine Passwort-basierte Schlüsselableitungsfunktion wie PBKDF2 verwenden.

+0

Kannst du es glauben, dass ich gerade überprüft habe, ob diese Frage letzte Nacht beantwortet wurde und keine gefunden hat? Was das Passwort angeht, warum ist es eine schlechte Idee?Es muss eine zufällige Zeichenfolge sein, richtig? Warum sollte md5() Hashing mit Salz über das Passwort eine schlechte Idee sein? – kingmaple

+0

Ich akzeptiere dies jedoch als eine Antwort, da es mir ein besseres Verständnis für das Problem gibt, obwohl ich nicht wirklich eine Lösung suchte. – kingmaple

+0

Ursprünglich dachte ich, du hast gerade das Passwort eingegeben. Allerdings ist md5 nicht die beste Idee, entweder md5() bekommt eine zufällige Zeichenkette, aber md5, sha1, sha512 und ähnliches sind sehr schnelle Funktionen, die man berechnen kann. Wenn Ihre Benutzer ein etwas gewöhnliches Kennwort verwenden, ist es wirklich einfach, es nur eine große Anzahl von Vermutungen zu testen (Sie können 2300 Millionen sha1 Summen pro Sekunde auf einer GPU tun). Stattdessen verwenden Sie etwas, das langsam ist, nicht langsam genug, um Ihr Programm zu verlangsamen, aber langsam genug, um jemanden abzubremsen, der nur Passwörter offline auf einer Kopie der verschlüsselten Daten erraten hat. Verwenden Sie dann PBKDF2 – imichaelmiers