示例#1
0
 /**
 +----------------------------------------------------------
 * 解密字符串
 * 
 +----------------------------------------------------------
 * @access static 
 +----------------------------------------------------------
 * @param string $str 字符串
 * @param string $key 加密key
 +----------------------------------------------------------
 * @return string
 +----------------------------------------------------------
 * @throws ThinkExecption
 +----------------------------------------------------------
 */
 function decrypt($str, $key)
 {
     if ($str == "") {
         return "";
     }
     $v = Xxtea::str2long($str, false);
     $k = Xxtea::str2long($key, false);
     $n = count($v) - 1;
     $z = $v[$n];
     $y = $v[0];
     $delta = 0x9e3779b9;
     $q = floor(6 + 52 / ($n + 1));
     $sum = Xxtea::int32($q * $delta);
     while ($sum != 0) {
         $e = $sum >> 2 & 3;
         for ($p = $n; $p > 0; $p--) {
             $z = $v[$p - 1];
             $mx = Xxtea::int32(($z >> 5 & 0x7ffffff ^ $y << 2) + ($y >> 3 & 0x1fffffff ^ $z << 4)) ^ Xxtea::int32(($sum ^ $y) + ($k[$p & 3 ^ $e] ^ $z));
             $y = $v[$p] = Xxtea::int32($v[$p] - $mx);
         }
         $z = $v[$n];
         $mx = Xxtea::int32(($z >> 5 & 0x7ffffff ^ $y << 2) + ($y >> 3 & 0x1fffffff ^ $z << 4)) ^ Xxtea::int32(($sum ^ $y) + ($k[$p & 3 ^ $e] ^ $z));
         $y = $v[0] = Xxtea::int32($v[0] - $mx);
         $sum = Xxtea::int32($sum - $delta);
     }
     return Xxtea::long2str($v, true);
 }