3

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

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

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

我已经尝试将 secret 作为 WordArray、Hex 字符串和 base64 字符串,但是当我调用时:

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

解密的是一个空的 WordArray。这让我发疯......什么失败了?我认为这个错误在某个地方是秘密的,有填充格式或一些奇怪的东西,但是Cryptojs和 openssl_(encrypt/decrypt)之前已经证明对我来说是相互兼容的。在我失去理智之前请帮忙。

4

1 回答 1

4

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

我可以让它工作的唯一方法是给它一个 Base64 字符串来工作。

key 和 iv 必须仍然是WordArray

*当我在数小时的时间里尝试 Base64 字符串时,我一定没有将服务器上的输出更改为实际发送 Base64 - 所以你去吧。

不过,感谢@CodesInChaos 提出了字节序。它让我再次搞乱了编码。

...现在清理所有那些散布在代码中console.log()的 ' 和var_dump()'...

于 2013-04-11T14:54:42.507 回答