Home >Backend Development >PHP Tutorial >ucenter reversible encryption function authcode usage example

ucenter reversible encryption function authcode usage example

WBOY
WBOYOriginal
2016-07-25 08:52:591061browse
This article introduces the usage of the authcode function, a reversible encryption function in ucenter. When browsing the ucenter source code, I found that this authcode function is used for encryption and decryption, and the effect is good.

ucenter reversible encryption function authcode function

Example:

<?php
//authcode加密函数
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 ''; 
} // bbs.it-home.org
} 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/>'; 


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn