CryptoJS.AES.decrypt
函数返回一个空的WordArray。
我的参数是secret
,key
和iv
。 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)
已被证明之前对我来说是相容的。在我失去理智之前请帮忙。
答案 0 :(得分:3)
好的,所以关键是CryptoJS.AES.decrypt(message, key, {iv:iv})
的文档说你可以为message
参数提供WordArray,Hex或Base64。这似乎不是真的。
我能让它工作的唯一方法是给它一个Base64字符串来处理。
键和iv必须仍为WordArray
*当我在工作时间内尝试使用Base64字符串时,我一定不能更改服务器上的输出以实际发送Base64 - 所以你去了。
感谢@CodesInChaos提出的endianess。它让我再次弄乱了编码。
...现在清理所有console.log()
和var_dump()
散布的代码......