您的位置:首页 > 编程语言 > PHP开发

PHP常用加密解密函数

2016-10-19 15:46 549 查看
一、加密解密函数

<?php
define('UC_KEY', 'abc123456');//整合程序的通讯密钥
function authcode($string,$operation='DECODE',$key='',$expiry=0)
{

$ckey_length = 4;

$key = md5($key ? $key : UC_KEY);

$keya = md5(substr($key, 0, 16));

$keyb = md5(substr($key, 16, 16));

$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';

$cryptkey = $keya.md5($keya.$keyc);

$key_length = strlen($cryptkey);

$string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;

$string_length = strlen($string);

$result = '';

$box = range(0, 255);

$rndkey = array();

for($i = 0; $i <= 255; $i++) {

$rndkey[$i] = ord($cryptkey[$i % $key_length]);

}
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]));

}

if($operation == 'DECODE') {

if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {

return substr($result, 26);

} else {

return '';
}

} else {

return $keyc.str_replace('=', '', base64_encode($result));

}

}

$ret= authcode('www.baidu.com','ENCODE', 'abc123456',1);

echo $ret .' ';
echo authcode($ret,'DECODE','abc123456',1) ;

?>

二、常用encrypt加解密函数

 
<?php
/**
  * 加密/解密字符串
  *
  * @param  string     $string    原始字符串
  * @param  string     $operation 操作选项: DECODE:解密;其它为加密
  * @param  string     $key       密钥
  *
  * @return string     $result    处理加/解密后的字符串
  */

 private function authcode($string, $operation, $key = '') {

      $key = md5($key ? $key : $GLOBALS['auth_key']);
      $key_length = strlen($key); 

      $string = $operation == 'DECODE' ? base64decode($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]));
      }
 
      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('=', '', base64_encode($result));
      } 
 }
?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: