javascript - CryptoJS 使用密码加密 AES 但 PHP 解密需要 key

标签 javascript php encryption cryptojs

我正在使用 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 使用密码生成 key ,然后使用该 key 加密数据。

However I'd like to decrypt the cipher using a PHP function, or maybe an online tool such as this: http://aesencryption.net/

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

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

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

最佳答案

如果您想直接提供key,您也应该提供IV。需要 IV(初始化向量),以便它可以与消息的第一个 block 进行异或运算。然后第一个 block 的密文与消息的第二个 block 进行异或运算,依此类推。这叫做 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

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

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

关于javascript - CryptoJS 使用密码加密 AES 但 PHP 解密需要 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26486152/

相关文章:

PHP代码显示在源代码中

python - RSA 加密/解密不返回原始消息

javascript - 从下拉按钮中以编程方式选择元素

javascript - Google map - 无法点击我的样式 map 中的标记

php - 如何在自定义枢轴类 laravel5 中添加修改器

PHP,杀死Windows进程?

javascript - 将 Axios 添加到 React 图表并获取 JSON 数据

javascript - jQuery sortable - 根据输入字段的值排序

android - Android API 24 及更低版本上的 PBKDF2WithHmacSHA256

java - Nodejs 加密字符串与 java : AES-256-CBC 不匹配