繁体   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