Php CodeIgniter加密解码不工作
我使用的是CodeIgniter加密库,一切都很好,但现在我将项目移动到了一个新的服务器上,它简单地停止了工作 这个简单的测试:Php CodeIgniter加密解码不工作,php,codeigniter,encryption,Php,Codeigniter,Encryption,我使用的是CodeIgniter加密库,一切都很好,但现在我将项目移动到了一个新的服务器上,它简单地停止了工作 这个简单的测试: $this->load->library('encrypt'); $str = '12345'; $key = 'my-secret-key'; $encrypted = $this->encrypt->encode($str, $key); var_dump($encrypted); var_dump($this->encrypt-&g
$this->load->library('encrypt');
$str = '12345';
$key = 'my-secret-key';
$encrypted = $this->encrypt->encode($str, $key);
var_dump($encrypted);
var_dump($this->encrypt->decode($encrypted, $key));
die();
它的回归:
string(76) "v9kMgDy+MUHgu5ug6N2qWms0/6tJ+a9N86kmpNvwkKI4nU8yL93kkAH1bmhn57ADh8WGB64i18E="
A PHP Error was encountered
Severity: Warning
Message: mcrypt_decrypt(): Received initialization vector of size 38, but size 32 is required for this encryption mode
Filename: libraries/Encrypt.php
Line Number: 346
string(0) ""
(PHP错误/警告只是偶尔出现)
谢谢请始终使用精确长度密钥(AES为128、192或256位,AES为精确长度IV(AES为128位或16字节),否则将出现错误或添加未知填充 错误很明显: 接收到大小为38的初始化向量,但此加密模式需要大小为32的初始化向量 IV的长度不正确 当然,有一个问题是,提供的代码没有IV 此外,错误消息指出预期的IV长度为32字节,这不是AES。很可能是带有256位密钥的Rijndael。这是使用mcrypt时的常见错误,其中参数是块大小而不是密钥大小。密钥大小基于传递的密钥的大小
MCRYPT_RIJNDAEL_256
是具有256位块大小的RIJNDAEL,其不是AES,MCRYPT_RIJNDAEL_128
是具有128位块大小的RIJNDAEL,其为AES始终使用精确长度键(AES为128、192或256位,AES为精确长度IV(AES为128位或16字节),否则将出现错误或添加一些未知填充
错误很明显:
接收到大小为38的初始化向量,但此加密模式需要大小为32的初始化向量
IV的长度不正确
当然,有一个问题是,提供的代码没有IV
此外,错误消息指出预期的IV长度为32字节,这不是AES。很可能是带有256位密钥的Rijndael。这是使用mcrypt时的常见错误,其中参数是块大小而不是密钥大小。密钥大小基于传递的密钥的大小
MCRYPT_RIJNDAEL_256
是具有256位块大小的RIJNDAEL,其不是AES,MCRYPT_RIJNDAEL_128
是一种128位块大小的RIJNDAEL,其为AES最好不要使用MCRYPT,它是废弃软件,多年来未更新,不支持标准PKCS#7(née PKCS#5)填充,只有非标准的空填充,甚至不能用二进制数据。McLIPT有许多优秀的追溯到2003。被禁止的McLIPT扩展将在PHP 7.2中被删除。相反,考虑使用或提供完整的解决方案,并保持和正确。你不应该使用<代码> $ ->加载->库('encrypt');。使用$this->load->library('encryption');
insteadIt最好不要使用mcrypt,它是废弃软件,多年未更新,不支持标准PKCS#7(née PKCS#5)填充,只有非标准的空填充,甚至不能用二进制数据。McLIPT有许多优秀的追溯到2003。被禁止的McLIPT扩展将在PHP 7.2中被删除。相反,考虑使用或提供完整的解决方案,并保持和正确。你不应该使用<代码> $ ->加载->库('encrypt');。使用$this->load->library('encrypt');