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