javascript - 使用 codeiginter 加密库对数据进行编码并使用 js-mcrypt 进行加密

标签 javascript php codeigniter mcrypt

我一直在尝试弄清楚如何使用 javascript 解密使用 codeiginter 的加密库编码的字符串。

到目前为止,我发现这是一个指南 php to js-mcrypt

但我不知道如何提供 iv 变量。 因为 codeiginter 在加密时随机生成它。

我的示例代码是

//PHP Side
    $this->encrypt->encode('apple','1234567');
    //The result is : 2lek4Q1mz4CJtTy2ot/uJWlfeGKuGiUKuKkR5Utkwc1nSWjf3JqG8gOhNmS13mt25QVbgP/2QOuffpn7rhIOmQ==


//JS Side
var encrypted = '2lek4Q1mz4CJtTy2ot/uJWlfeGKuGiUKuKkR5Utkwc1nSWjf3JqG8gOhNmS13mt25QVbgP/2QOuffpn7rhIOmQ==';



var key = 'fcea920f7412b5da7be0cf42b8c93759';//md5 version of "1234567"

var iv = 'some 32 length string';// I don't know how to get the IV because it constantly change in PHP

var decrypted = mcrypt.Decrypt(atob(encrypted), iv, key, 'rijndael-256', 'cbc');

                console.log(decrypted);

最佳答案

一个随机的 iv 通常被添加到加密数据中。

使用“rijndael-256”填充的 5 个字节(“apple”)的简单加密将产生 32 个字节的输出。在这种情况下,加密输出为 88 字节,因此 iv 可能与其他内容一起存在。

此外,mcrypt 有点脑残,因为它不支持标准 PKCS#7(又名 PKCS#5)填充,因此这也是一个互操作性问题。

注意:“rijndael-256”表示 block 大小为 256 位,而不是 key 大小,AES 本质上是 block 大小为 128 位的 Rijndael,最好使用 128 位的 block 大小,并且与 AES 兼容。

关于javascript - 使用 codeiginter 加密库对数据进行编码并使用 js-mcrypt 进行加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35404017/

相关文章:

javascript - 如何在angularjs中插入和更新查询

javascript - 无法在 JavaScript 中匹配 IP 正则表达式

php - 在 MySQL 数据库中存储特殊字符的最佳方法是什么?

php - 如何在 codeigniter 中插入具有多个单选名称的单选按钮值?

php - where 子句不适用于 like 查询

php - Codeigniter 无法使用 join 方法从数据库表中删除行

javascript - 回调实例冲突?

javascript - Kendo UI - 弹出窗口

javascript - 处理付款

php - ajaxCRUD : two questions about insert