簡體   English   中英

CryptoJS錯誤的AES編碼

[英]CryptoJS incorrect AES encoding

如果我使用相同的密鑰和ivector,為什么CryptoJS的輸出與PHP的openssl_encrypt不同?

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==

CryptoJS.AES.encrypt將嘗試根據您傳遞的密鑰自動使用AES-128,AES-192或AES-256。 在您的情況下,您傳遞一個秘密密碼短語('17cc0f ...')而不是密鑰,這將導致它生成自己的AES-256密鑰。

該文檔指出

CryptoJS支持AES-128,AES-192和AES-256。 它將根據您傳入的密鑰的大小來選擇變體。如果使用密碼短語,它將生成一個256位密鑰。

為了使用密鑰,您必須先解析一個十六進制密鑰並將其傳遞。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM