【问题标题】:CryptoJS.AES.decrypt failure reasons?CryptoJS.AES.decrypt 失败的原因?
【发布时间】:2013-04-11 12:23:34
【问题描述】:

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

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

secret 使用 php 的 openssl_encrypt() 加密 - 明文为 32 字节 - 结果为 48 字节(因此它似乎正确填充)。

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

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

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

【问题讨论】:

  • 对这两个 API 都不熟悉,但 WordArray 可能意味着字节序问题。

标签: javascript encryption cryptojs


【解决方案1】:

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

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

key 和 iv 仍然必须是 WordArray

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

感谢@CodesInChaos 提出了字节序。它让我又开始搞乱编码了。

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2013-06-26
  • 2013-12-22
  • 1970-01-01
  • 2011-01-15
  • 1970-01-01
  • 2018-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多