本文共 3903 字,大约阅读时间需要 13 分钟。
转载自:
<?php
/*
[Discuz!] (C)2001-2007 Comsenz Inc. This is NOT a freeware, use is subject to license terms$Id: global.func.php 13426 2008-04-15 03:37:02Z heyond $
*/if(!defined('IN_DISCUZ')) {
exit('Access Denied'); }/**
* 加密或者解密用户信息 * @param $string - 加密或解密的串 * @param $operation - 加密还是解密 * @param 密钥 * @return 返回字符串 * $ckey_length 随机密钥长度 取值 0-32; * 加入随机密钥,可以令密文无任何规律,即便是原文和密钥完全相同,加密结果也会每次不同,增大破解难度。 * 取值越大,密文变动规律越大,密文变化 = 16 的 $ckey_length 次方 * 当此值为 0 时,则不产生随机密钥 */function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {
$ckey_length = 4;
$key = md5($key ? $key : $GLOBALS['discuz_auth_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)); }}
/**
* 清理cookie */ function clearcookies() { global $discuz_uid, $discuz_user, $discuz_pw, $discuz_secques, $adminid, $credits; dsetcookie('sid', '', -86400 * 365); dsetcookie('auth', '', -86400 * 365); dsetcookie('visitedfid', '', -86400 * 365); dsetcookie('onlinedetail', '', -86400 * 365, 0); dsetcookie('loginuser', '', -86400 * 365); dsetcookie('activationauth', '', -86400 * 365);$discuz_uid = $adminid = $credits = 0;
$discuz_user = $discuz_pw = $discuz_secques = ''; }/**
* 检查积分下限 * @param $creditsarray - 积分数组 * @param $coef - 积分 */ function checklowerlimit($creditsarray, $coef = 1) { if(is_array($creditsarray)) { global $extcredits, $id; foreach($creditsarray as $id => $addcredits) { $addcredits = $addcredits * $coef; if($addcredits < 0 && ($GLOBALS['extcredits'.$id] < $extcredits[$id]['lowerlimit'] || (($GLOBALS['extcredits'.$id] + $addcredits) < $extcredits[$id]['lowerlimit']))) { if($coef == 1) { showmessage('credits_policy_lowerlimit'); } else { showmessage('credits_policy_num_lowerlimit'); } } } } }/**
* 密码检测 * * @param string $md5 * @param string $verified * @param string $salt * @return * 0= Failed * 1= MD5 with salt, 2= Dual MD5, 3= Normal Md5 4= MD5-16 */function checkmd5($md5, $verified, $salt = '') {
if(md5($md5.$salt) == $verified) { $result = !empty($salt) ? 1 : 2; } elseif(empty($salt)) { $result = $md5 == $verified ? 3 : ((strlen($verified) == 16 && substr($md5, 8, 16) == $verified) ? 4 : 0); } else { $result = 0; } return $result; }/**
* 检查模板源文件是否更新 * 当编译文件不存时强制重新编译 * 当 tplrefresh = 1 时检查文件 * 当 tplrefresh > 1 时,则根据 tplrefresh 取余,无余时则检查更新 * */ function checktplrefresh($maintpl, $subtpl, $timecompare, $templateid, $tpldir) { global $tplrefresh; if(empty($timecompare) || $tplrefresh == 1 || ($tplrefresh > 1 && !($GLOBALS['timestamp'] % $tplrefresh))) { if(empty($timecompare) || @filemtime($subtpl) > $timecompare) { require_once DISCUZ_ROOT.'./include/template.func.php'; parse_template($maintpl, $templateid, $tpldir); return TRUE; } } return FALSE; } ?>