我一直试图弄清楚如何使用使用codeiginter加密库编码的javascript来解密字符串。
到目前为止,我发现这是一个指南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);
答案 0 :(得分:1)
随机iv通常预先加密到加密数据。
使用' rijndael-256'进行简单的5字节加密(' apple')会产生32个字节的输出。在这种情况下,加密输出是88字节,所以iv可能与其他东西一起。
此外,mcrypt有点脑死亡,因为它不支持标准PKCS#7(AKA PKCS#5)填充,因此这也是一个互操作性问题。
注意:' rijndael-256'表示块大小为256位,而不是密钥大小,AES本质上是Rijndael,块大小为128位,最好使用128位的块大小并与AES兼容。