PHP 对COOKIE进行加密解密的方法 PHP可逆COOKIE加密解密程序代码
我们在进行PHP程序开发的时候,要记住客户登陆信息,一般要嘛用COOKIE,要嘛用SESSION,因为SESSION需要保存在服务器端,对服务器资源消耗比较大,高并发访问环境下一般推荐使用COOKIE将登陆信息记录在用户本地电脑上,但是如果是使用明文保存登陆信息,客户端的其他程序也能读取到这些COOKIE,这样就容易造成客户信息泄漏,因此我们需要对保存在客户端的COOKIE进行加密,然后在服务器访问的时候,再解密对比COOKIE。
原来设想通过php自身提供的md5函数进行加密,但是md5加密是不可逆的,只适用于类似密码加密的地方,而cookie加密后还需要再解密进行还原,因此不能用MD5函数,下面为大家提供一个加密解密函数方法,如下:
<?php
//加密函数
function passport_encrypt($txt, $key) {
srand((double)microtime() * 1000000);
$encrypt_key = md5(rand(0, 32000));
$ctr = 0;
$tmp = '';
for($i = 0;$i < strlen($txt); $i++) {
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
}
return base64_encode(passport_key($tmp, $key));
}
//解密函数
function passport_decrypt($txt, $key) {
$txt = passport_key(base64_decode($txt), $key);
$tmp = '';
for($i = 0;$i < strlen($txt); $i++) {
$md5 = $txt[$i];
$tmp .= $txt[++$i] ^ $md5;
}
return $tmp;
}
function passport_key($txt, $encrypt_key) {
$encrypt_key = md5($encrypt_key);
$ctr = 0;
$tmp = '';
for($i = 0; $i < strlen($txt); $i++) {
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
}
return $tmp;
}
//用法:
echo passport_encrypt('奔牛网','bnxbcom');
echo '<br>';
echo passport_decrypt('TagB+lcWVLTH2wC6Db3EEFjF','bnxbcom');
?>
- 最新评论