Crypt加密算法的PHP實現

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