Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php CodeIgniter加密解码不工作_Php_Codeigniter_Encryption - Fatal编程技术网

Php 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

我使用的是CodeIgniter加密库,一切都很好,但现在我将项目移动到了一个新的服务器上,它简单地停止了工作

这个简单的测试:

$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');