edauth高效可逆随机加密函数,性能比discuz的authcode函数更优化,响应更快
在项目配置文件中定议 'auth_key'=>'你的密匙字符串'// edauth高效可逆随机加密函数参数解释
// author: pgcao(排骨曹)
#------------------------------------------------------------------------#
# $string: 明文 或 密文
# $operation:true表示加密,false表示解密
# $key: 密匙
# $outtime:密文有效期, 单位为秒
# $entype:加密方式 有md5和sha1两种 加密解密需要统一使用同一种方式才能正确还原明文
function edauth($string, $operation = true, $key = '', $outtime = 0, $entype = 'md5'){
$key_length = 4;
if($entype == 'md5'){ //使用md5方式
$long_len = 32; $half_len = 16; $entype == 'md5';
}else{ //使用sha1方式
$long_len = 40; $half_len = 20; $entype == 'sha1';
}
$key = $key != '' ? $key : substr(md5($_server['document_root'].c('auth_key').$_server['remote_addr']),0,30);
$fixedkey = hash($entype, $key);
$egiskeys = md5(substr($fixedkey, $half_len, $half_len));
$runtokey = $key_length ? ($operation ? substr(hash($entype, microtime(true)), -$key_length) : substr($string, 0, $key_length)) : '';
$keys = hash($entype, substr($runtokey, 0, $half_len) . substr($fixedkey, 0, $half_len) . substr($runtokey, $half_len) . substr($fixedkey, $half_len));
$string = $operation ? sprintf('%010d', $outtime ? $outtime + time() : 0).substr(md5($string.$egiskeys), 0, $half_len) . $string : base64_decode(substr($string, $key_length));
$i = 0; $result = '';
$string_length = strlen($string);
for ($i = 0; $i $result .= chr(ord($string{$i}) ^ ord($keys{$i % $long_len}));
}
if($operation){
return $runtokey . str_replace('=', '', base64_encode($result));
}else{
if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, $half_len) == substr(md5(substr($result, $half_len+10).$egiskeys), 0, $half_len)) {
return substr($result, $half_len+10);
} else {
return '';
}
}
}以下是测速代码,有兴趣的pr可以试用authcode函数进行比较,同一页面用得越多越能体现出前后性能区别
ad:真正免费,域名+虚机+企业邮箱=0元