CryptoJS.AES.decrypt失败的原因?

时间:2013-04-11 12:23:35

标签: javascript encryption cryptojs

CryptoJS.AES.decrypt函数返回一个空的WordArray。

我的参数是secretkeyiv。 key是256位WordArray并且被确认为正确,iv是128位WordArray并且也被确认为正确。

秘密使用php的openssl_encrypt()加密 - 明文是32个字节 - 结果是48个字节(所以它似乎正确填充)。

我尝试过秘密作为WordArray,Hex字符串和base64字符串,但是当我打电话时:

var decrypted = CryptoJS.AES.decrypt(secret, key, {iv: iv});

decrypted是一个空的WordArray。这让我很生气......什么失败了?我认为错误在某个地方是秘密的,填充格式或奇怪的东西,但Cryptojs和o penssl_(encrypt/decrypt)已被证明之前对我来说是相容的。在我失去理智之前请帮忙。

1 个答案:

答案 0 :(得分:3)

好的,所以关键是CryptoJS.AES.decrypt(message, key, {iv:iv})的文档说你可以为message参数提供WordArray,Hex或Base64。这似乎不是真的。

我能让它工作的唯一方法是给它一个Base64字符串来处理。

键和iv必须仍为WordArray

*当我在工作时间内尝试使用Base64字符串时,我一定不能更改服务器上的输出以实际发送Base64 - 所以你去了。

感谢@CodesInChaos提出的endianess。它让我再次弄​​乱了编码。

...现在清理所有console.log()var_dump()散布的代码......