CryptoJS.AES.decrypt失败的原因?
CryptoJS.AES.decrypt
函数返回一个空的WordArray。CryptoJS.AES.decrypt失败的原因?
我的参数是secret
,key
和iv
。键是一个256位的WordArray并被确认为正确的,iv是一个128位的WordArray,并且也被证实是正确的。
秘密使用php的openssl_encrypt()
加密 - 明文为32字节 - 结果为48字节(所以它似乎是填充正确)。
我试图秘密作为WordArray,十六进制字符串和BASE64字符串,但如果我说:
var decrypted = CryptoJS.AES.decrypt(secret, key, {iv: iv});
解密是一个空WordArray。这让我疯狂......什么是失败?我认为这个错误在某个地方是秘密的,有填充格式或者有些奇怪,但是Cryptojs
和penssl_(encrypt/decrypt)
已经证明在我以前可以兼容。在我迷失之前请帮助。
好的,所以关键在于CryptoJS.AES.decrypt(message, key, {iv:iv})
的文档说您可以为message
参数提供WordArray,Hex或Base64。这似乎不是真的。
我可以让它工作的唯一方法是给它一个Base64字符串来处理。
密钥和IV仍必须WordArray
*当我试图在我的时间瞎搞的Base64编码字符串,我不能更改了服务器上的输出,以实际发送的Base64 - 所以你去。
感谢@CodesInChaos提出了endianess,虽然。它开始让我再次弄乱编码。
...现在清理所有散落关于这些代码console.log()
的和var_dump()
的...
我一直给它一个WordArray作为消息,我花了很多年试图找出它。喂它只是Base64马上解决了它。谢谢! – ndsc 2013-12-26 17:10:57
自己运行后,我已经打开https://code.google.com/p/crypto-js/issues/detail?id=112 – 2014-01-11 03:09:26
不熟悉或者API,但WordArray可能意味着排列顺序问题。 – CodesInChaos 2013-04-11 12:46:50