
<?php
class Crypt

{
/**
* 加密方法
*
* @param string $str 須要加密的內容
* @param string $key 密鑰
* @param bool $toBase64 是否base64(最好true吧,好比cookie加密長度有限制的)
* return string
*/
public function encrypt($str,$key,$toBase64=
true){

$r = md5($key);

$c=0;

$v = "";

$len = strlen($str);

$l = strlen($r);
for ($i=0;$i<$len;$i++){
if ($c== $l) $c=0;

$v.= substr($r,$c,1) .

(substr($str,$i,1) ^ substr($r,$c,1));

$c++;

}
if($toBase64) {
return base64_encode(self::_ed($v,$key));

}
else {
return self::_ed($v,$key);

}
}
/**
* 解密方法
*
* @param string $str 加密後的內容
* @param string $key 密鑰
* @param bool $toBase64
* return string
*/
public function decrypt($str,$key,$toBase64=
true) {
if($toBase64) {

$str = self::_ed(base64_decode($str),$key);

}
else {

$str = self::_ed($str,$key);

}

$v = "";

$len = strlen($str);
for ($i=0;$i<$len;$i++){

$md5 = substr($str,$i,1);

$i++;

$v.= (substr($str,$i,1) ^ $md5);

}
return $v;

}
private function _ed($str,$key) {

$r = md5($key);

$c=0;

$v = "";

$len = strlen($str);

$l = strlen($r);
for ($i=0;$i<$len;$i++) {
if ($c==$l) $c=0;

$v.= substr($str,$i,1) ^ substr($r,$c,1);

$c++;

}
return $v;

}

}
// 使用方式

$crypt =
new Crypt();

$
string = 'hello leven';

$key = '123456';

$encode = $crypt->encrypt($
string,$key,
true);

$decode = $crypt->decrypt($encode,$key,
true);

echo $encode;

echo
"<br />";

echo $decode;

?>