我在从存储的 cookie 中写入和解析一些 DATA 时遇到问题。
这是我的加密和解密函数(我在这里的另一个主题中找到了)。
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()'s separeted by '#'。所以将来可能会有 10 个 ID 存储(加密)在 cookie 中……我不知道 cookie 的最大大小和 AES 因素,但我认为 cookie 应该得到它。
(如果有更简单的同步方式来加密(这不应该是高安全性,但主要是安全的)请随时告诉我。