xxtea加密算法的PHP实现

《xxtea加密算法的PHP实现》<?php

《xxtea加密算法的PHP实现》
/*
《xxtea加密算法的PHP实现》 * xtea加密算法
《xxtea加密算法的PHP实现》 */

《xxtea加密算法的PHP实现》

class XxTea {

《xxtea加密算法的PHP实现》

  
/**
《xxtea加密算法的PHP实现》    * 加密方法
《xxtea加密算法的PHP实现》    *
《xxtea加密算法的PHP实现》    * @param string $str    需要加密的内容
《xxtea加密算法的PHP实现》    * @param string $key    密钥
《xxtea加密算法的PHP实现》    * @param bool $toBase64  是否base64(最好true吧,比如cookie加密长度有限制的)
《xxtea加密算法的PHP实现》    * return string
《xxtea加密算法的PHP实现》    */

《xxtea加密算法的PHP实现》  
public function encrypt($str, $key, $toBase64=
true) {

《xxtea加密算法的PHP实现》    
if ($str == “”) {

《xxtea加密算法的PHP实现》      
return “”;

《xxtea加密算法的PHP实现》    }

《xxtea加密算法的PHP实现》    $v = $
this->_str2long ( $str,
true );

《xxtea加密算法的PHP实现》    $k = $
this->_str2long ( $key,
false );

《xxtea加密算法的PHP实现》    
if (count ( $k ) < 4) {

《xxtea加密算法的PHP实现》      
for($i = count ( $k ); $i < 4; $i ++) {

《xxtea加密算法的PHP实现》        $k [$i] = 0;

《xxtea加密算法的PHP实现》      }

《xxtea加密算法的PHP实现》    }

《xxtea加密算法的PHP实现》    $n = count ( $v ) – 1;

《xxtea加密算法的PHP实现》    

《xxtea加密算法的PHP实现》    $z = $v [$n];

《xxtea加密算法的PHP实现》    $y = $v [0];

《xxtea加密算法的PHP实现》    $delta = 0x9E3779B9;

《xxtea加密算法的PHP实现》    $q = floor ( 6 + 52 / ($n + 1) );

《xxtea加密算法的PHP实现》    $sum = 0;

《xxtea加密算法的PHP实现》    
while ( 0 < $q — ) {

《xxtea加密算法的PHP实现》      $sum = $
this->_int32 ( $sum + $delta );

《xxtea加密算法的PHP实现》      $e = $sum >> 2 & 3;

《xxtea加密算法的PHP实现》      
for($p = 0; $p < $n; $p ++) {

《xxtea加密算法的PHP实现》        $y = $v [$p + 1];

《xxtea加密算法的PHP实现》        $mx = $
this->_int32 ( (($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4) ) ^ $
this->_int32 ( ($sum ^ $y) + ($k [$p & 3 ^ $e] ^ $z) );

《xxtea加密算法的PHP实现》        $z = $v [$p] = $
this->_int32 ( $v [$p] + $mx );

《xxtea加密算法的PHP实现》      }

《xxtea加密算法的PHP实现》      $y = $v [0];

《xxtea加密算法的PHP实现》      $mx = $
this->_int32 ( (($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4) ) ^ $
this->_int32 ( ($sum ^ $y) + ($k [$p & 3 ^ $e] ^ $z) );

《xxtea加密算法的PHP实现》      $z = $v [$n] = $
this->_int32 ( $v [$n] + $mx );

《xxtea加密算法的PHP实现》    }

《xxtea加密算法的PHP实现》    
if ($toBase64) {

《xxtea加密算法的PHP实现》      
return base64_encode($
this->_long2str ( $v,
false ));

《xxtea加密算法的PHP实现》    }

《xxtea加密算法的PHP实现》    
return $
this->_long2str ( $v,
false );

《xxtea加密算法的PHP实现》  }

《xxtea加密算法的PHP实现》

  
/**
《xxtea加密算法的PHP实现》    * 解密方法
《xxtea加密算法的PHP实现》    *
《xxtea加密算法的PHP实现》    * @param string $str    加密后的内容
《xxtea加密算法的PHP实现》    * @param string $key    密钥
《xxtea加密算法的PHP实现》    * @param bool $toBase64  
《xxtea加密算法的PHP实现》    * return string
《xxtea加密算法的PHP实现》    */

《xxtea加密算法的PHP实现》  
public function decrypt($str, $key, $toBase64=
true) {

《xxtea加密算法的PHP实现》    
if ($str == “”) {

《xxtea加密算法的PHP实现》      
return “”;

《xxtea加密算法的PHP实现》    }

《xxtea加密算法的PHP实现》    $toBase64 && $str = base64_decode($str);

《xxtea加密算法的PHP实现》    $v = $
this->_str2long ( $str,
false );

《xxtea加密算法的PHP实现》    $k = $
this->_str2long ( $key,
false );

《xxtea加密算法的PHP实现》    
if (count ( $k ) < 4) {

《xxtea加密算法的PHP实现》      
for($i = count ( $k ); $i < 4; $i ++) {

《xxtea加密算法的PHP实现》        $k [$i] = 0;

《xxtea加密算法的PHP实现》      }

《xxtea加密算法的PHP实现》    }

《xxtea加密算法的PHP实现》    $n = count ( $v ) – 1;

《xxtea加密算法的PHP实现》    

《xxtea加密算法的PHP实现》    $z = $v [$n];

《xxtea加密算法的PHP实现》    $y = $v [0];

《xxtea加密算法的PHP实现》    $delta = 0x9E3779B9;

《xxtea加密算法的PHP实现》    $q = floor ( 6 + 52 / ($n + 1) );

《xxtea加密算法的PHP实现》    $sum = $
this->_int32 ( $q * $delta );

《xxtea加密算法的PHP实现》    
while ( $sum != 0 ) {

《xxtea加密算法的PHP实现》      $e = $sum >> 2 & 3;

《xxtea加密算法的PHP实现》      
for($p = $n; $p > 0; $p –) {

《xxtea加密算法的PHP实现》        $z = $v [$p – 1];

《xxtea加密算法的PHP实现》        $mx = $
this->_int32 ( (($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4) ) ^ $
this->_int32 ( ($sum ^ $y) + ($k [$p & 3 ^ $e] ^ $z) );

《xxtea加密算法的PHP实现》        $y = $v [$p] = $
this->_int32 ( $v [$p] – $mx );

《xxtea加密算法的PHP实现》      }

《xxtea加密算法的PHP实现》      $z = $v [$n];

《xxtea加密算法的PHP实现》      $mx = $
this->_int32 ( (($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4) ) ^ $
this->_int32 ( ($sum ^ $y) + ($k [$p & 3 ^ $e] ^ $z) );

《xxtea加密算法的PHP实现》      $y = $v [0] = $
this->_int32 ( $v [0] – $mx );

《xxtea加密算法的PHP实现》      $sum = $
this->_int32 ( $sum – $delta );

《xxtea加密算法的PHP实现》    }

《xxtea加密算法的PHP实现》    
return $
this->_long2str ( $v,
true );

《xxtea加密算法的PHP实现》  }

《xxtea加密算法的PHP实现》

  
/**
《xxtea加密算法的PHP实现》    * 长整型转为字符串
《xxtea加密算法的PHP实现》    *
《xxtea加密算法的PHP实现》    * @param long $v
《xxtea加密算法的PHP实现》    * @param boolean $w
《xxtea加密算法的PHP实现》    * @return string
《xxtea加密算法的PHP实现》    */

《xxtea加密算法的PHP实现》  
private function _long2str($v, $w) {

《xxtea加密算法的PHP实现》    $len = count ( $v );

《xxtea加密算法的PHP实现》    $n = ($len – 1) << 2;

《xxtea加密算法的PHP实现》    
if ($w) {

《xxtea加密算法的PHP实现》      $m = $v [$len – 1];

《xxtea加密算法的PHP实现》      
if (($m < $n – 3) || ($m > $n))

《xxtea加密算法的PHP实现》        
return
false;

《xxtea加密算法的PHP实现》      $n = $m;

《xxtea加密算法的PHP实现》    }

《xxtea加密算法的PHP实现》    $s = array ();

《xxtea加密算法的PHP实现》    
for($i = 0; $i < $len; $i ++) {

《xxtea加密算法的PHP实现》      $s [$i] = pack (
“V”, $v [$i] );

《xxtea加密算法的PHP实现》    }

《xxtea加密算法的PHP实现》    
if ($w) {

《xxtea加密算法的PHP实现》      
return substr ( join ( ”, $s ), 0, $n );

《xxtea加密算法的PHP实现》    }
else {

《xxtea加密算法的PHP实现》      
return join ( ”, $s );

《xxtea加密算法的PHP实现》    }

《xxtea加密算法的PHP实现》  }

《xxtea加密算法的PHP实现》

  
/**
《xxtea加密算法的PHP实现》    * 字符串转为长整型
《xxtea加密算法的PHP实现》    *
《xxtea加密算法的PHP实现》    * @param string $s
《xxtea加密算法的PHP实现》    * @param boolean $w
《xxtea加密算法的PHP实现》    * @return Ambigous <multitype:, number>
《xxtea加密算法的PHP实现》    */

《xxtea加密算法的PHP实现》  
private function _str2long($s, $w) {

《xxtea加密算法的PHP实现》    $v = unpack (
“V*”, $s . str_repeat (
“\0”, (4 – strlen ( $s ) % 4) & 3 ) );

《xxtea加密算法的PHP实现》    $v = array_values ( $v );

《xxtea加密算法的PHP实现》    
if ($w) {

《xxtea加密算法的PHP实现》      $v [count ( $v )] = strlen ( $s );

《xxtea加密算法的PHP实现》    }

《xxtea加密算法的PHP实现》    
return $v;

《xxtea加密算法的PHP实现》  }

《xxtea加密算法的PHP实现》  

《xxtea加密算法的PHP实现》  
private function _int32($n) {

《xxtea加密算法的PHP实现》    
while ( $n >= 2147483648 )

《xxtea加密算法的PHP实现》      $n -= 4294967296;

《xxtea加密算法的PHP实现》    
while ( $n <= – 2147483649 )

《xxtea加密算法的PHP实现》      $n += 4294967296;

《xxtea加密算法的PHP实现》    
return (
int ) $n;

《xxtea加密算法的PHP实现》  }

《xxtea加密算法的PHP实现》}

《xxtea加密算法的PHP实现》

// 使用方式

《xxtea加密算法的PHP实现》$xxtea =
new XxTea();

《xxtea加密算法的PHP实现》$
string = ‘hello leven’;

《xxtea加密算法的PHP实现》$key = ‘123456’;

《xxtea加密算法的PHP实现》$encode = $xxtea->encrypt($
string,$key,
true);

《xxtea加密算法的PHP实现》$decode = $xxtea->decrypt($encode,$key,
true);

《xxtea加密算法的PHP实现》echo $encode;

《xxtea加密算法的PHP实现》echo
“<br />”;

《xxtea加密算法的PHP实现》echo $decode;

点赞