2016-08-11 5 views
0

Here is my solution to PHP, Ruby & Swift.verschiedene Ausgänge für AES-Verschlüsselung CryptoJS und AES-Verschlüsselung in JavaScript mit

ich Fragen konfrontiert, wenn CryptoJS auf meinem Test.

mein Code wie diese

var data = "Hello World"; 
var key = "57119C07F45756AF6E81E662BE2CCE62"; 
var iv = "GsCJsm/uyxG7rBTgBMrSiA=="; 

var encryptedData = CryptoJS.AES.encrypt(data, 
    CryptoJS.enc.Hex.parse(key), { 
     mode: CryptoJS.mode.CBC, 
     padding: CryptoJS.pad.Pkcs7, 
     iv: CryptoJS.enc.Base64.parse(iv) 
    } 
); 

console.log("encryptedData: " + encryptedData); 

// var crypttext = encryptedData.toString(); 
var crypttext = "k4wX2Q9GHU4eU8Tf9pDu+w=="; 

var decryptedData = CryptoJS.AES.decrypt({ 
    ciphertext: CryptoJS.enc.Base64.parse(crypttext) 
}, CryptoJS.enc.Hex.parse(key), { 
    mode: CryptoJS.mode.CBC, 
    padding: CryptoJS.pad.Pkcs7, 
    iv: CryptoJS.enc.Base64.parse(iv) 
}); 

console.log("decryptedData: " + decryptedData); 

console.log Ergebnis

encryptedData: 97SwKfGtNARERiSYyZxdAQ==

decryptedData:

Antwort

1

ich in Ihrem PHP-Code geschaut haben. Sie verwenden einen 32-stelligen Schlüssel, der offensichtlich Hex-codiert ist, aber statt ihn in Bytes zu dekodieren, verwenden Sie die Zeichen direkt. Daher ist auch die aes-256-cbc Verschlüsselung falsch.

Wenn Sie Ihren irreführenden PHP-Code nicht ändern möchten, können Sie einfach den gleichen Fehler in CryptoJS: CryptoJS.enc.Utf8.parse(key) anstelle von CryptoJS.enc.Hex.parse(key) machen.


Sicherheits-Überlegungen:

Die IV (sprich: random) unvorhersehbar sein muss. Verwenden Sie keine statische IV, da dies die Chiffre deterministisch und daher nicht semantisch sicher macht. Ein Angreifer, der Chiffriertexte beobachtet, kann feststellen, wann das gleiche Nachrichtenpräfix vorher gesendet wurde. Die IV ist nicht geheim, Sie können sie also zusammen mit dem Geheimtext senden. Normalerweise wird es einfach dem Geheimtext vorangestellt und vor der Entschlüsselung abgeschnitten.

Es ist besser, Ihre Chiffrate zu authentifizieren, so dass Angriffe wie eine padding oracle attack nicht möglich sind. Dies kann mit authentifizierten Modi wie GCM oder EAX oder mit einem encrypt-then-MAC Schema geschehen.

+0

Vielen Dank für die Antwort.
Da ich nicht wirklich mit der Verschlüsselung/Entschlüsselung Kram vertraut bin. Also, ich kann diesen Fehler machen.
Wie auch immer, lass es mich später versuchen, sehen, ob es funktioniert.
PS: Random IV würde nach dem Test der Funktionen und vor dem Push-to-Production-Umgebung verwendet werden.
Jackyrx

+0

BTW, ich habe es getestet. Es klappt. Danke zuerst. Ich werde es später verbessern. Irgendwelche Ratschläge? @ Artjom B. – Jackyrx

Verwandte Themen