CryptoJS.AES.decrypt失败的原因?

问题描述:

CryptoJS.AES.decrypt函数返回一个空的WordArray。CryptoJS.AES.decrypt失败的原因?

我的参数是secret,keyiv。键是一个256位的WordArray并被确认为正确的,iv是一个128位的WordArray,并且也被证实是正确的。

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

我试图秘密作为WordArray,十六进制字符串和BASE64字符串,但如果我说:

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

解密是一个空WordArray。这让我疯狂......什么是失败?我认为这个错误在某个地方是秘密的,有填充格式或者有些奇怪,但是Cryptojspenssl_(encrypt/decrypt)已经证明在我以前可以兼容。在我迷失之前请帮助。

+0

不熟悉或者API,但WordArray可能意味着排列顺序问题。 – CodesInChaos 2013-04-11 12:46:50

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

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

密钥和IV仍必须WordArray

*当我试图在我的时间瞎搞的Base64编码字符串,我不能更改了服务器上的输出,以实际发送的Base64 - 所以你去。

感谢@CodesInChaos提出了endianess,虽然。它开始让我再次弄​​乱编码。

...现在清理所有散落关于这些代码console.log()的和var_dump()的...

+0

我一直给它一个WordArray作为消息,我花了很多年试图找出它。喂它只是Base64马上解决了它。谢谢! – ndsc 2013-12-26 17:10:57

+0

自己运行后,我已经打开https://code.google.com/p/crypto-js/issues/detail?id=112 – 2014-01-11 03:09:26