我需要在Cookie中安全地加密和解密有关用户(user_id
和password
)的信息。
最好的方法是什么?我需要哪些加密和解密功能?
我正在使用PHP
和MySQL
并参加示例?
答案 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中,并且(可能)不会显示在应用程序的任何页面上。