2017-10-18 5 views
0

Warum unterscheidet sich die Ausgabe von CryptoJS von PHP 'openssl_encrypt, wenn ich den gleichen Schlüssel und ivector verwende?CryptoJS inkorrekte AES-Kodierung

openssl_encrypt('test' , 'aes-256-cbc', '17cc0ffd728f34c171e06c47df4227a32ee6ef5d6c60398eeab30cf34306c644', 0 , base64_decode('aROnq5DocMLgrlpAF6yjgw==')); 

Ausgang:

oIcizpTDCTgtTGu3lO1cJg== 

Jedes Mal, wenn die gleiche Leistung.

CryptoJS:

var encrypted = CryptoJS.AES.encrypt("test", CryptoJS.enc.Hex.parse('UDOuDk5uxceoFWxtrabuEhamMC1T4Abr'), { 
iv: CryptoJS.enc.Hex.parse('HLcM0VZYfsgPo2ye')}).toString(); 

Ausgang:

VTJGc2RHVmtYMTlrVHh4N0F3V2VySWlFcjBGeWlRRkcyMmNabEtjWmpmYz0= 

Warum ist die Ausgabe von CryptoJS jedes Mal anders?

Edit:

Nach Ihren Hinweisen:

var encrypted = CryptoJS.AES.encrypt("test", CryptoJS.enc.Hex.parse('UDOuDk5uxceoFWxtrabuEhamMC1T4Abr'), { 
iv: CryptoJS.enc.Hex.parse('HLcM0VZYfsgPo2ye')}).toString(); 

Ausgang:

CoFpbmd4YzOiVEFzVkeaDQ== 

Jetzt jedes Mal ist die gleiche

Aber anders als in PHP:

openssl_encrypt("test" , "aes-256-cbc", "UDOuDk5uxceoFWxtrabuEhamMC1T4Abr", 0 , "HLcM0VZYfsgPo2ye"); 

Ausgang:

oV9OZVYM80p8mlHH5wnzEg== 

Antwort

1

CryptoJS.AES.encrypt versucht automatisch, AES-128 zu verwenden, AES-192 oder AES-256, je nach dem Schlüssel Sie es passieren. In Ihrem Fall übergeben Sie eine geheime Passphrase ('17cc0f ...') anstelle eines Schlüssels, der dazu führt, dass sie ihren eigenen AES-256-Schlüssel generiert.

The documentation states:

CryptoJS unterstützt AES-128, AES-192 und AES-256. Es wird die Variante nach der Größe des Schlüssels auswählen, den Sie übergeben. Wenn Sie eine Passphrase verwenden, dann wird es einen 256-Bit-Schlüssel generieren.

Um einen Schlüssel zu verwenden, müssen Sie zuerst einen Hex-Schlüssel analysieren und diesen übergeben.

var key = CryptoJS.enc.Hex.parse('000102030405060708090a0b0c0d0e0f'); 
var encrypted = CryptoJS.AES.encrypt("test", key, { iv: iv }); 
Verwandte Themen