Esempio n. 1
0
 /**
  * 加密or解密,来自互联网,类似discuz传递信息
  * <code>
  * echo $str=edcode('1371817454','ENCODE','1');
  * echo edcode('XbfSC2GOpSTtwHwOIDW7Fg','DECODE','2000558');
  * </code>
  * @param string $string 密文
  * @param string $operation 操作类型 DECODE | DECODE
  * @param string $key 加密密钥
  * @return string
  */
 public static function edcode($string, $operation, $key = 'ePHP')
 {
     //ENCODE
     $key_length = strlen($key);
     $string = $operation == 'DECODE' ? Func::safe_b64decode($string) : substr(md5($string . $key), 0, 8) . $string;
     $string_length = strlen($string);
     $rndkey = $box = array();
     $result = '';
     for ($i = 0; $i <= 255; $i++) {
         $rndkey[$i] = ord($key[$i % $key_length]);
         $box[$i] = $i;
     }
     for ($j = $i = 0; $i < 256; $i++) {
         $j = ($j + $box[$i] + $rndkey[$i]) % 256;
         $tmp = $box[$i];
         $box[$i] = $box[$j];
         $box[$j] = $tmp;
     }
     for ($a = $j = $i = 0; $i < $string_length; $i++) {
         $a = ($a + 1) % 256;
         $j = ($j + $box[$a]) % 256;
         $tmp = $box[$a];
         $box[$a] = $box[$j];
         $box[$j] = $tmp;
         $result .= chr(ord($string[$i]) ^ $box[($box[$a] + $box[$j]) % 256]);
     }
     //DECODE
     if ($operation == 'DECODE') {
         if (substr($result, 0, 8) == substr(md5(substr($result, 8) . $key), 0, 8)) {
             return substr($result, 8);
         } else {
             return '';
         }
     } else {
         return str_replace('=', '', Func::safe_b64encode($result));
     }
 }