您现在的位置是:首页 > cms教程 > Discuz教程Discuz教程
Discuz的authcode函数注释
香寒2025-07-20Discuz教程已有人查阅
导读Discuz函数中最经典的函数是authcode函数,因为supesite,UCenterHome,UCenter,Discuz X都使用了这个函数进行加密
Discuz函数中最经典的函数是authcode函数,因为supesite,UCenterHome,UCenter,Discuz X都使用了这个函数进行加密啊传输串与cookie
今天为大家带来authcode的详解,如果写的不好,请大家拍砖。
今天为大家带来authcode的详解,如果写的不好,请大家拍砖。
/*
*
* 函数作用:通过一个固定的密钥,对一个字符串进行加密解密,加密后的字符串是随机的
* 参数解析:$string是被加密的字符串,$operation是操作类型('ENCODE'是加密,'DECODE'是解密操作),$key是加密时用的密钥,$expiry是过期时间
* 使用举例:authcode('123', 'ENCODE', 'jordan', 0); 即用'jordan'这个字符串加密'123'这个字符串
*
* */
function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {
//keyc的长度,解密的时候需要用它与密钥生成密码本
$ckey_length = 4;
//对我们的密钥进行md5取值,32位固定值
$key = md5($key ? $key : $GLOBALS['discuz_auth_key']);
//keya是对上面的md5(密钥前16位)的再次md5
$keya = md5(substr($key, 0, 16));
//keyb是对上面的md5(密钥后16位)的再次md5,验证串
$keyb = md5(substr($key, 16, 16));
//取keyc的长度
//是解密,将keyc从密码串上截取下来 注:keyc是传递过来的,不变
//是加密取md5(微秒串),并取下它的keyc长度个 注:keyc是随机
$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';
//用keya拼接上md5后的keya与keyc的拼接, 用来加密或解密 注:加密时随机,解密时固定
$cryptkey = $keya.md5($keya.$keyc);
//$cryptkey长度是 16+32=48
$key_length = strlen($cryptkey);
//判断操作分为加密,解密,取得处理串
//如果是解密,截取下keyc的长度的串,因为加密的时候拼接在最前面了,并base64反解
//如果是加密,将时间戳拼接上过期秒数,格式化成十位的字符串,拼接上验证串的16位,再拼接原串
$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 array(0, 1, 2, 3, ...省略... , 255);
$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') {
//如果是解密
//验证是否过期,验证串是否与keyb所生成的串一致
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 {
//如果是加密拼接keyc与base64(打乱串)
//加密完成
return $keyc.str_replace('=', '', base64_encode($result));
}
}
本文标签:
很赞哦! ()
上一篇:怎么搭建discuz论坛
相关教程
- PHP中的array_intersect_ukey():用自定义回调函数比较键名的数组交集(只比较键)
- PHP中的array_intersect_uassoc():用自定义回调函数比较键名的数组交集
- PHP中的array_filter():用回调函数过滤数组元素
- PHP中的array_diff_ukey():用自定义回调函数比较键名的数组差集(只比键)
- PHP中的array_diff_uassoc():用自定义回调函数比较键名的数组差集
- PHP中的asort()函数:按值升序排序并保持键值关联
- PHP中的arsort()函数:保持键值关联的逆向排序
- PHP中五种字母三角形图案的详细拆解(使用range()函数)
- PHP中闰年判定的两种方法:日期函数与条件运算
- PHP中字符串反转的两种实现方式:内置函数与手动循环
- PHP中数字反转的两种方法:数学算法与字符串函数
- PHP发送邮件:mail()函数
图文教程
discuz万能SQL查询调用语句写法示例
首先在最底层source\class\table写入底层安全调用文件例如:table_common_friendlink.php然后前台source\module\portal调用查询文件:portal_index.php
Discuz实现NT负载均衡的方法
在前面的几篇文章中,主要谈到了在DiscuzNT中的跨站缓存数据,数据库负载均衡。但如果要实现将产品分布式布置到若干机器,组成集群来共同支撑起整个业务的话
ASP.NET网站集成Discuz!NT3.1论坛的步骤方法
使用 FTP 软件登录您的服务器,建立一个单独的目录,或选择合适的位置,确保存放在此位置的文件能够被 web 请求所访问到,并且该目录中具有执行 aspx 代码的权限。
Discuz安装过程中数据库连接失败的原因及解决方法
数据库连接失败通常是因为配置错误、数据库服务器不可用或权限问题导致的。了解PHP和MySQL的基础知识,如如何配置数据库连接、常见的错误代码及其含义,将有助于你更快地解决问题。
相关源码
-
(自适应响应式)HTML5中小学早教教育机构类网站pbootcms模板下载基于PbootCMS内核开发的响应式模板,为早教中心、培训学校等教育机构打造,提供从技术架构到视觉呈现的全套网站建设方案。查看源码 -
(自适应响应式)HTML5幕墙装饰工程建筑装修公司pbootcms模板下载基于PbootCMS开发的响应式模板,为幕墙工程、建筑装饰企业设计,通过数字化展示提升企业专业形象与项目展示能力。结构化数据标记增强项目案例收录,智能URL路由优化,支持每个工程案例独立设置关键词与描述查看源码 -
pbootcms模板PC+WAP娱乐新闻资讯类博客网站源码该模板基于PbootCMS内核开发,专为娱乐新闻、健康生活类资讯网站设计,同时支持快速适配其他行业(如企业官网、博客门户等),仅需替换图文内容即可完成转型。查看源码 -
帝国cms7.5个人博客资讯文章模板下载本模板简洁个人博客网站设计开发,采用帝国CMS内核构建,只需替换文字图片即可快速搭建专业网站。自适应手机端设计,数据实时同步,操作简单便捷。PHP程序确保安全稳定运行,帮助您以较低成本获取持续业务。查看源码 -
(自适应响应式)高端网站建设设计公司互联网营销网站pbootcms模板本模板基于PbootCMS内核开发,为网站建设公司和互联网营销企业量身打造。采用响应式设计,适配各种移动设备,提供统一的后台管理体验查看源码 -
自适应html5二极管LED灯具灯饰类企业网网站模板该PbootCMS内核开发的响应式模板专为LED照明、灯具制造类企业设计,通过HTML5技术实现手机与PC端自适应显示,确保跨设备访问体验一致。企业可快速替换图文内容适配其他工业领域查看源码
| 分享笔记 (共有 篇笔记) |
