0

我在从存储的 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 应该得到它。

(如果有更简单的同步方式来加密(这不应该是高安全性,但主要是安全的)请随时告诉我。

4

1 回答 1

0

尝试使用bin2hex而不是base64_encode(). 我之前回答了关于 SO 的类似问题。

于 2013-06-08T15:17:38.897 回答