在使用存储的Cookie编写和解析某些DATA时,我遇到了问题。
这是我的crypt和decrypt函数(我在这里的另一个主题中找到了它)。
function decrypt($crypttext){
$crypttext = base64_decode($crypttext);
$plaintext = '';
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_CBC, '');
$ivsize = mcrypt_enc_get_iv_size($td);
$iv = substr($crypttext, 0, $ivsize);
$crypttext = substr($crypttext, $ivsize);
if ($iv)
{
mcrypt_generic_init($td, CRYPTKEY, $iv);
$plaintext = mdecrypt_generic($td, $crypttext);
}
return trim($plaintext);
}
function encrypt($plaintext){
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_CBC, '');
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
mcrypt_generic_init($td, CRYPTKEY, $iv);
$crypttext = mcrypt_generic($td, $plaintext);
mcrypt_generic_deinit($td);
return base64_encode($iv.$crypttext);
}
我的用法很简单:
//read, split if neccesarry, check if already in it, if not-> add, crypt, write
if(isset($_COOKIE['DATA'])){
$data = decrypt($_COOKIE['DATA']);
$search = explode('#',$data);
if(!in_array($lnk, $search)){
$data.= "#".$lnk; // $lnk = additional data
$err = setrawcookie("DATA", encrypt($data));
}
$err = true;
}
在大多数尝试中,添加$lnk
无效。在我写完之后解密cookie是错误的。未定义的垃圾。 (所以有些东西不能正常工作)。
我根本无法在代码中找到任何错误。我最好的猜测是问题是由以下原因造成的:
$ivsize = mcrypt_enc_get_iv_size($td);
$iv = substr($crypttext, 0, $ivsize);
具体而言,$ciphertext
是否小于$ivsize
?
还有其他想法吗?
//以防止有关它的问题: 我存储的数据只是php uniqueID()由'#'分隔。所以将来可能会在cookie中存储(加密)10个ID ...我不知道cookie的最大大小和因素AES打击它,但我认为cookie应该得到它。
(如果有一种更简单的同步加密方式(这不应该是高安全性,但大多数是安全的),请随时告诉我。