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;
?>