我一直在尝试弄清楚如何使用 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/