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