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

Posted

技术标签:

【中文标题】使用 codeiginter 加密库对数据进行编码并使用 js-mcrypt 进行解密【英文标题】:Encode data using codeiginter encryption library and dycrypting using js-mcrypt 【发布时间】:2016-05-26 01:08:15 【问题描述】:

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

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

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

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

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

【讨论】:

以上是关于使用 codeiginter 加密库对数据进行编码并使用 js-mcrypt 进行解密的主要内容,如果未能解决你的问题,请参考以下文章

python连接pgsql库对指定字段的参数加密

编码加密Hash算法

如何使用 PHP bigquery 客户端库对 bigquery 数据进行分页?

如何在 TensorFlow 中使用 Hugging Face Transformers 库对自定义数据进行文本分类?

如何在 PHP 中没有硬编码密钥的情况下进行对称加密

使用 Python 的 Scikit-Learn 库对文本数据进行聚类并绘图