错误:" mcrypt_decrypt():IV参数必须与blocksize"一样长。

时间:2016-04-26 19:13:36

标签: php mcrypt

我在其他地方看过同样的错误,但没有发现任何人和我有同样的问题。

我正在提交contactEdit.hbs(把手)的表单,该表单会被注入contact.php页面,然后表格会被发送到addcontact.php

contact.php [ INJECT ] => contactEdit.hbs [ POST ] => {{1 }}的

addcontact.php使用mcrypt,如下所示。

addcontact.php

在此之后,我加密从上一页(define('IV_SIZE', mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC)); function encrypt ($key, $payload) { $iv = mcrypt_create_iv(IV_SIZE, MCRYPT_DEV_URANDOM); $crypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $payload, MCRYPT_MODE_CBC, $iv); $combo = $iv . $crypt; $garble = base64_encode($iv . $crypt); return $garble; } function decrypt ($key, $garble) { $combo = base64_decode($garble); $iv = substr($combo, 0, IV_SIZE); $crypt = substr($combo, IV_SIZE, strlen($combo)); $payload = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $crypt, MCRYPT_MODE_CBC, $iv); return $payload; } $key = "mysupersafeandsecretkeythatialmostforgottoremovewhenpostingthis"; )表单提交的数据,并将值存储在我的数据库中,下面是加密的示例

contactEdit.hbs

当输入框中的所有填写在表单上并提交时,它完美运行...所有内容都发布到数据库,我们将返回到// ENCRYPTION if(!empty($nationality)){ $nationality = encrypt($key, $nationality); } if(!empty($landline)){ $landline = encrypt($key, $landline); } if(!empty($mobile)){ $mobile = encrypt($key, $mobile); } if(!empty($email)){ $email = encrypt($key, $email); } if(!empty($nationalid)){ $nationalid = encrypt($key, $nationalid); } if(!empty($passport)){ $passport = encrypt($key, $passport); } if(!empty($dob)){ $dob = encrypt($key, $dob); } 页面脚本末尾的一个简单的头重定向(我还将值存储在.json数组中,工作正常!)

现在这就是问题所在。当只填写一对(或没有)输入框并且我们尝试提交表单时,我收到以下错误:

contacts.php

这里的第23行:

mcrypt_decrypt(): The IV parameter must be as long as the blocksize in addcontact.php on line 23

如果表单上填写了任何内容,它仍然会被加密并成功发布到数据库,并且仍然保存到.json文件中。

那么为什么我会收到这个错误,一切似乎仍然正常?唯一的问题是,由于此错误,$payload = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $crypt, MCRYPT_MODE_CBC, $iv);将不会在脚本末尾执行标头重定向(addcontact.php),这会带来自己的错误:

header('Location: contacts.php');

帮助表示感谢,如果我不够清楚,请随时问: - )

0 个答案:

没有答案