快捷搜索:   nginx

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');

?>

顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论