加密和解密存储在cookie中的信息

时间:2011-02-25 08:36:08

标签: php mysql cookies

我需要在Cookie中安全地加密和解密有关用户(user_idpassword)的信息。

最好的方法是什么?我需要哪些加密和解密功能?

我正在使用PHPMySQL并参加示例?

3 个答案:

答案 0 :(得分:11)

例如

Set encrypted cookie:
<?php

$time = time()+60*60*24*30*12; //store cookie for one year
setcookie('cookie_name', encryptCookie('cookie_value'),$time,'/');

?>

Get encrypted cookie value:

<?php

$cookie_value = decryptCookie($_COOKIE['cookie_name']);

?>

这是加密解密cookie的功能:

    <?php

function encryptCookie($value){
   if(!$value){return false;}
   $key = 'The Line Secret Key';
   $text = $value;
   $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
   $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
   $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv);
   return trim(base64_encode($crypttext)); //encode for cookie
}

function decryptCookie($value){
   if(!$value){return false;}
   $key = 'The Line Secret Key';
   $crypttext = base64_decode($value); //decode cookie
   $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
   $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
   $decrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $crypttext, MCRYPT_MODE_ECB, $iv);
   return trim($decrypttext);
}

?>

您可以在此处详细了解mcrypt函数: php mcrypt function

答案 1 :(得分:8)

不要将密码存储在cookie中。永远不要做这种事情。 如果您想要某种方式让用户无需输入登录名和密码进行登录,您可以在登录时生成一些随机令牌(例如sha1(mt_rand()))并将此值存储在cookie和数据库中。 / p>

然后,在尝试识别用户时,您只需检查他的cookie中找到的值是否可以在您的数据库中找到。每次登录时都会生成一个新值(使用名称+密码或使用此cookie)。

答案 2 :(得分:1)

没有好办法“安全地加密和解密有关cookie中用户的信息”,因为将这些信息存储在cookie中本质上是不安全的。

推荐的技术是生成随机会话标识符,并将其用作存储在cookie中的唯一信息。然后在服务器端使用此会话ID在数据库或文件中查找用户的实际帐户信息(以及他们正在做什么的任何状态),这样您只需发送少量无意义的数据,在用户发出的每个请求的网络中。如果这个cookie被The Bad Guys截获,它只会危害用户的会话(允许攻击者暂时冒充用户直到会话结束);用户的密码将保持安全,因为它不在cookie中,并且(可能)不会显示在应用程序的任何页面上。