2017-10-18 16 views
0

同じキーとivectorを使用している場合、CryptoJSの出力がPHPのopenssl_encryptと異なるのはなぜですか?CryptoJS不正なAESコード

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

出力:

oIcizpTDCTgtTGu3lO1cJg== 

たびに同じ出力。

CryptoJS:

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

出力:

VTJGc2RHVmtYMTlrVHh4N0F3V2VySWlFcjBGeWlRRkcyMmNabEtjWmpmYz0= 

なぜ異なるCryptoJSからの出力は、各時間ですか?

編集:あなたのヒントの後

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

出力:

CoFpbmd4YzOiVEFzVkeaDQ== 

今たびに同じ

です。しかしPHPよりも異なります。

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

出力:

oV9OZVYM80p8mlHH5wnzEg== 

答えて

1

CryptoJS.AES.encryptは自動的にあなたがそれを渡すキーに応じて、AES-128、AES-192またはAES-256を使用しようとします。あなたのケースでは、秘密のパスフレーズ( '17cc0f ...')を自分のAES-256鍵を生成する鍵の代わりに渡します。

The documentation states

CryptoJSは、AES-128、AES-192、およびAES-256をサポートしています。パスフレーズを使用する場合、 は256ビットの鍵を生成します。パスフレーズを使用する場合は、 を使用します。

キーを使用するには、最初に16進数キーを解析して渡す必要があります。

var key = CryptoJS.enc.Hex.parse('000102030405060708090a0b0c0d0e0f'); 
var encrypted = CryptoJS.AES.encrypt("test", key, { iv: iv }); 
関連する問題