使用 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 进行解密的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 PHP bigquery 客户端库对 bigquery 数据进行分页?