【问题标题】:CryptoJS encrypts AES with passphrase but PHP decrypt needs a keyCryptoJS 使用密码加密 AES 但 PHP 解密需要密钥
【发布时间】:2014-12-16 15:29:43
【问题描述】:

我正在使用CryptoJS 加密一个字符串:

  function doHash(msg){
    msg = String(msg);
    var passphrase = 'aggourakia';
    var hash = CryptoJS.AES.encrypt(msg, passphrase);
    var ciphertext=  hash.ciphertext.toString(); //return ciphertext instead of object
    return ciphertext;      
}

据我了解,CryptoJS使用密码生成密钥,然后使用该密钥对数据进行加密。

但是我想使用 PHP 函数来解密密码,或者也许 诸如此类的在线工具:http://aesencryption.net/

问题是这些需要密钥不是密码。

如何直接向 CryptoJS AES 提供 密钥,我可以在服务器端或任何在线工具上使用它来解密?

问题是,我已经很难找到用于解密 AES 密码的 PHP 函数了,而且这个密码/密钥增加了复杂性

【问题讨论】:

  • 我敢打赌,密码用于通过 PBKDF2 派生密钥。
  • @Narf 你愿意赌多少钱?
  • @owlstead 呵呵,这只是一个猜测。
  • @Narf 看起来像某人didn't want to bet on it :)

标签: javascript php encryption cryptojs


【解决方案1】:

如果您想直接提供 key,您也应该提供 IV。 IV(初始化向量)是必需的,因此它可以与消息的第一个块进行异或。然后第一个块的密文与消息的第二个块进行异或,依此类推。这称为cipher-block chaining (CBC)

var key = CryptoJS.enc.Hex.parse('000102030405060708090a0b0c0d0e0f');
var iv  = CryptoJS.enc.Hex.parse('101112131415161718191a1b1c1d1e1f');

var encrypted = CryptoJS.AES.encrypt("Message", key, { iv: iv });

来自 CryptoJS 文档https://code.google.com/p/crypto-js/#Custom_Key_and_IV

您可以像 @Narf 所写的那样使用 PBKDF2 生成密钥和 IV。 https://code.google.com/p/crypto-js/#PBKDF2

关于 PHP:mcrypt 具有 MCRYPT_RIJNDAEL_128 密码,即 AES 128。MCRYPT_RIJNDAEL_192 和 MCRYPT_RIJNDAEL_256 与 AES 192 和 AES 256 不兼容,因为 AES 使用具有所有密钥大小的 128 位块。 Rijndael 具有可配置的块大小。如果您提供 128 位密钥,CryptoJS 将使用 128 位 AES,如果您使用接受密码的函数,它将使用 256 位。

【讨论】:

  • 如果你问我 mcrypt 已过时但未弃用 :( 我收到了一些来自开发人员的邮件,他们希望创建底层 C 库的新版本,但这将是多年来的第一个- 目前没有维护(所以如果有错误或漏洞,没有人会修复它们)。
  • 您应该提供 IV 以使用使用密钥的 encrypt 函数的主要观点是正确的,所以我已经修复了我能找到的错误。请查看更改并注意。
  • PHP函数中是否也需要使用IV?我还没有启动 PHP 服务器 - 所以我正在使用这个工具来查看它是否可以在 mCrypt 中工作 - tools4noobs.com/online_tools/decrypt - 这实际上是一个 mCrypt 工具。不幸的是,我只看到我需要在这里输入密文和解密密钥。我正在复制您在示例中提供的密钥和示例中输出的密文,但它似乎在吐出乱码
  • @NicholasKyriakides 是的,你也需要 PHP 的 IV。
猜你喜欢
  • 2014-08-17
  • 2019-08-13
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
  • 2014-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多