13十/08关
php加密cookie[原创]
我们知道php的cookie是明文方式记录在本机上,有些数据要需要有点保密需求,所以写了这个class。
其中加密算法修改于 网站上流传的 xxtea算法.
代码如下
1.class.xxtea.php
andot@ujn.edu.cn>
* Version: 1.5
* LastModified: Dec 5, 2006
* This library is free. You can redistribute it and/or modify it.
* max修改于2008.08.08 maxtank@qq.com
*/
class xxtea{
private $key1 = 'AmPu$this1';
private function long2str($v, $w) {
$len = count($v);
$n = ($len - 1) << 2;
if ($w) {
$m = $v[$len - 1];
if (($m < $n - 3) || ($m > $n)) return false;
$n = $m;
}
$s = array();
for ($i = 0; $i < $len; $i++) {
$s[$i] = pack("V", $v[$i]);
}
if ($w) {
return substr(join('', $s), 0, $n);
}
else {
return join('', $s);
}
}
private function str2long($s, $w) {
$v = unpack("V*", $s. str_repeat("\0", (4 - strlen($s) % 4) & 3));
$v = array_values($v);
if ($w) {
$v[count($v)] = strlen($s);
}
return $v;
}
private function int32($n) {
while ($n >= 2147483648) $n -= 4294967296;
while ($n <= -2147483649) $n += 4294967296;
return (int)$n;
}
protected function xxtea_encrypt($str, $key) {
if ($str == "") {
return "";
}
$v = $this->str2long($str, true);
$k = $this->str2long($key, false);
if (count($k) < 4) {
for ($i = count($k); $i < 4; $i++) {
$k[$i] = 0;
}
}
$n = count($v) - 1;
$z = $v[$n];
$y = $v[0];
$delta = 0x9E3779B9;
$q = floor(6 + 52 / ($n + 1));
$sum = 0;
while (0 < $q--) {
$sum = $this->int32($sum + $delta);
$e = $sum >> 2 & 3;
for ($p = 0; $p < $n; $p++) {
$y = $v[$p + 1];
$mx = $this->int32((($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4)) ^ $this->int32(($sum ^ $y) + ($k[$p & 3 ^ $e] ^ $z));
$z = $v[$p] = $this->int32($v[$p] + $mx);
}
$y = $v[0];
$mx = $this->int32((($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4)) ^ $this->int32(($sum ^ $y) + ($k[$p & 3 ^ $e] ^ $z));
$z = $v[$n] = $this->int32($v[$n] + $mx);
}
return $this->long2str($v, false);
}
protected function xxtea_decrypt($str, $key) {
if ($str == "") {
return "";
}
$v = $this->str2long($str, false);
$k = $this->str2long($key, false);
if (count($k) < 4) {
for ($i = count($k); $i < 4; $i++) {
$k[$i] = 0;
}
}
$n = count($v) - 1;
$z = $v[$n];
$y = $v[0];
$delta = 0x9E3779B9;
$q = floor(6 + 52 / ($n + 1));
$sum = $this->int32($q * $delta);
while ($sum != 0) {
$e = $sum >> 2 & 3;
for ($p = $n; $p > 0; $p--) {
$z = $v[$p - 1];
$mx = $this->int32((($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4)) ^ $this->int32(($sum ^ $y) + ($k[$p & 3 ^ $e] ^ $z));
$y = $v[$p] = $this->int32($v[$p] - $mx);
}
$z = $v[$n];
$mx =$this->int32((($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4)) ^ $this->int32(($sum ^ $y) + ($k[$p & 3 ^ $e] ^ $z));
$y = $v[0] = $this->int32($v[0] - $mx);
$sum = $this->int32($sum - $delta);
}
return $this->long2str($v, true);
}
//转化为16进制
protected function stringToHex ($s) {
$r = "0x";
$hexes = array ("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f");
for ($i=0; $i> 4)] . $hexes [(ord($s{$i}) & 0xf)]);}
return $r;
}
//16进抽转化为代码
protected function hexToString ($h) {
$r = "";
for ($i= (substr($h, 0, 2)=="0x")?2:0; $istringToHex($this->xxtea_encrypt($str,$this->key1));
}
//解密
public function decrypt($str){
return $this->xxtea_decrypt($this->hexToString($str),$this->key1);
}
}
?>
2. class.safe.cookie.php
itime = 60*60*24*30; //30天过期
}
//设置安全cookie(名称,值)
public function set_cookie($cn,$cv){
$cv = parent::encrypt($cv); //调用父类的方法
setcookie($cn, $cv, time() + $this->itime);
}
//读取cookie(名称)
public function get_cookie($cn){
return parent::decrypt($_COOKIE[$cn]);
}
//删除cookie(名称)
public function del_cookie($cn){
setcookie($cn,"",time()-3600);
}
//删除所有cookie(名称)
public function del_all_cookie(){
foreach ($_COOKIE as $name => $value) {
setcookie($name,"",time()-3600);
}
}
}
/*
$n = new SafeCookie();
print_r($_COOKIE);
$n->set_cookie("abc","中国人啊56611");
$n->set_cookie("ab11c","中国");
$n->del_cookie("ab11c");
$n->del_all_cookie();
print_r($_COOKIE);
*/
?>
页面
| 一 | 二 | 三 | 四 | 五 | 六 | 日 |
|---|---|---|---|---|---|---|
| « 二 | ||||||
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 | ||||
分类目录
标签
上海
优化
加密
协议
命令
图片
字段
安全
导航
工业设计
左下对齐
开源
异常处理
数据库设计
水平居中
生活创意
自动更新
菜单
ajax
Apache
aptana
class
cmd
cookie
css
css布局
datagird
design
div
eclipse
hosts
html
http
ide
iframe
javascript
jquery
js
mysql
php
python
svn
table
try
xxtea