爆炸爆炸

该博客已废弃
posts - 155, comments - 117, trackbacks - 0, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

浏览UCenter源代码的时候发现这个函数,刚好有需要,就记录一下。

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, 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));
    }
}
/***************************************************************************/
$string = authcode("Hello","ENCODE","HTML_TCCJ_AUTH");
echo $string,'<br/>';
echo authcode($string,"DECODE","HTML_TCCJ_AUTH"),'<br/>';

 

 

厚德载物,大道若弦...