我在其他地方看过同样的错误,但没有发现任何人和我有同样的问题。
我正在提交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');
帮助表示感谢,如果我不够清楚,请随时问: - )