UCenter中的一个可逆加密函数authcode函数代码

前端之家收集整理的这篇文章主要介绍了UCenter中的一个可逆加密函数authcode函数代码前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

<div class="codetitle"><a style="CURSOR: pointer" data="72242" class="copybut" id="copybut72242" onclick="doCopy('code72242')"> 代码如下:

<div class="codebody" id="code72242">
function authcode($string,$operation = 'DECODE',$key = '',$expiry = 0) { $ckey_length = 4; // 随机密钥长度 取值 0-32;
// 加入随机密钥,可以令密文无任何规律,即便是原文和密钥完全相同,加密结果也会每次不同,增大破解难度。
// 取值越大,密文变动规律越大,密文变化 = 16 的 $ckey_length 次方
// 当此值为 0 时,则不产生随机密钥 $key = md5($key ? $key : UC_KEY);
$keya = md5(substr($key,16));
$keyb = md5(substr($key,16,16));
$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string,$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),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,10) == 0 || substr($result,10) - time() > 0) && substr($result,10,16) == substr(md5(substr($result,26).$keyb),16)) {
return substr($result,26);
} else {
return '';
}
} else {
return $keyc.str_replace('=','',base64_encode($result));
}
}
/***/
$string = authcode("Hello","ENCODE","HTML_TCCJ_AUTH");
echo $string,'
';
echo authcode($string,"DECODE","HTML_TCCJ_AUTH"),'
';

猜你在找的PHP相关文章