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

时间:2016-02-15 07:49:58

标签: javascript php codeigniter mcrypt

我一直试图弄清楚如何使用使用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);

1 个答案:

答案 0 :(得分:1)

随机iv通常预先加密到加密数据。

使用' rijndael-256'进行简单的5字节加密(' apple')会产生32个字节的输出。在这种情况下,加密输出是88字节,所以iv可能与其他东西一起。

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

注意:' rijndael-256'表示块大小为256位,而不是密钥大小,AES本质上是Rijndael,块大小为128位,最好使用128位的块大小并与AES兼容。