当前位置:首页 > 日记 > 正文

Discuz加密解密函数的使用方法和中文注释

Discuz加密解密函数的使用方法和中文注释
复制代码代码如下所示:
< PHP

*字符串明文或密文
*加密或解密操作美元编码解码
*关键钥匙
*有效期
* /
功能验证码($字符串操作= 'decode美元,美元关键=,= 0美元到期){
动态密钥长度,同一明文会产生不同的密文,是依靠动态密钥。
加上随机密钥,可以使密文无任何规则,即使密钥是原来相同的加密结果,每次都会有所不同,增加了破解的难度。
/ /变化较大,其密文和密文变化= 16次ckey_length美元大
当这个值为0时,不生成随机密钥。
ckey_length = 4美元;


/ / $变量{ 'discuz_auth_key}这里可以根据自己的需要修改
美元关键= MD5(美元美元美元关键关键:{ 'discuz_auth_key全局'});

密钥将参与加密和解密。
$科亚= MD5(substr($,0, 16));
该键将用于进行数据完整性验证。
$键盘= MD5(substr($,16, 16));
C/密文生成变化的关键
keyc = $($美元ckey_length操作= = 'decode'substr($ 0,$ ckey_length字符串substr():MD5(瞬时),($ ckey_length))):;
参与键的操作
cryptkey = $(美元keya.md5科亚keyc美元美元。);
key_length美元= strlen($ cryptkey);
/ /明文,10节省时间戳之前,验证数据加密的有效性,10到26位来存储键盘美元(关键B),解密这个关键的数据完整性验证
如果是 / /解码,将开始从ckey_length美元,因为之前ckey_length美元拯救动态密钥的密文,确保正确的解密
$字符串操作= = 'decode'base64_decode美元(substr($字符串,ckey_length美元)):sprintf(% 010d,到期美元+时间($期满):(0)。函数MD5($字符串。$键盘),0, 16)。为字符串;
string_length美元= strlen($字符串);
结果=;
框=范围(0, 255);
rndkey美元=阵();
拥有/密钥簿
($ i = 0;$ i < 255;$ + +){
{ } =我rndkey美元美元ORD($ cryptkey { $ % $我key_length });
}
具有固定算法,破坏密钥本,增加了随机性,看起来很复杂,事实上并没有增加密文的强度。
对于($ = $ I = 0;$ i < 256;$ + +){
J =(J + $盒{ $我} + $ rndkey { $我})% 256;
$ = $;
$;
$;
}
加密和解密的核心部分。
为($ = $ J = $我= 0;美元美元美元我<< string_length;i++){
$ =($ + 1)% 256;
$ =($ J $ +盒{ })% 256;
$ $ =;
$;
$;
从这本书中的关键字键或把它变成一个字符。
由于美元= CHR(ORD($字符串{我})^(合箱{(合箱{一} +美元美元箱{ $ J })% 256 }));
}
如果(= = 'decode操作美元){
/ / substr($,0, 10)数据有效性验证= = 0
/ / substr($,0, 10)时间(0)>有效性验证数据
/ / substr($,10, 16)= substr(MD5(substr($,26)美元的键盘),0, 16)来验证数据的完整性
验证数据 / /有效性,请参阅未加密的明文格式
如果((substr($,0, 10)= = 0 | | substr($,0, 10)-时间(孔)> 0)($,10, 16)= substr(MD5(substr($,26)美元的键盘),0, 16)){
返回substr($,26);
{人}
返回' ';
}
{人}
密钥存储在动态密文中,这就是同一明文、密文解密可以产生不同的原因。
/ /因为加密的密文,可能是一些特殊的字符,复制过程可能会丢失,所以使用Base64编码
返回的keyc.str_replace(' = ',' ',base64_encode($结果));
}
}
=一美元;
$ =验证码($,编码
$;
回声验证码($,解码
>

相关文章

如何清理dedecms(梦想)系统网站缓存(

如何清理dedecms(梦想)系统网站缓存(

缓存,系统,网站,解决方案,梦想,Today, the site dedecms (DeDeCMS) background of the total problem, is the new page, generating static page, open the page blank, what did not.The problem is reacted to web space technology to …

PHP数组加权的函数代码

PHP数组加权的函数代码

数组,函数,代码,电脑软件,PHP,复制代码代码如下所示: 功能assoc_unique(ARR美元,美元关键){ tmp_arr美元=阵(); foreach(ARR美元美元美元K = v){ 如果(in_array($ V { $关键},tmp_arr美元)){ unset($ ARR { $ K }); {人} tmp_arr美元{ } = $ V { $关键}; } }…

PP助手(Win)界面清新2.2.0资源经验

PP助手(Win)界面清新2.2.0资源经验

界面,助手,经验,电脑软件,PP,在信息技术飞速发展的今天,我们需要回归基础,找到产品的原始属性,用户在第三方应用助手的最基本需求就是在游戏中找到软件。如何提高用户在寻找游戏和寻找软件过程中的经验,给用户留下深刻印象,对于提高用户粘性至关…

将SQL脚本文件导入MySQL的PHP代码

将SQL脚本文件导入MySQL的PHP代码

脚本,代码实例,文件,电脑软件,SQL,复制代码代码如下: 文件的名称 为文件名= 'churc SQL; MySQL主机 mysql_host美元= 'localhost; mysql用户名 mysql_username美元= 'root; MySQL密码 mysql_password美元=; 数据库名称 mysql_database美元= …

MySQL插入处理重复键值的几种方法

MySQL插入处理重复键值的几种方法

键值,几种方法,电脑软件,MySQL,首先设置2个测试表,并在id列上创建唯一的约束。 MySQL >创建表test1(ID int,NAME varchar(5),int类型,主键); 查询OK,0行受影响(0.01秒) MySQL >创建表test2(ID int,NAME varchar(5),int类型,主键); 查询OK,0行受影响(0.01秒) MySQL …

已经很长时间了,为什么我还没有收到

已经很长时间了,为什么我还没有收到

我还,很长时间,电脑软件,已经很长时间了,为什么我还没有收到结果呢 如果您正在使用邮件来获取投诉进展: 请登录到您的邮箱并及时检查,经过处理后,我们会立即发送邮件。不同的邮件提供者可能有不同的邮件延迟。一些邮件提供商的反垃圾邮件策略…

Oracle9i产品文档

Oracle9i产品文档

产品文档,电脑软件,Oracle9i,Oracle当然你看是Oracle 9i产品文档。 1。增强的可扩展性 Oracle9i真正应用集群是Oracle并行服务器series.oracle9i真正应用集群设计了一种快速、高效的集群共享高速缓存登记访问相同的数据的下一代,因此应用透…

如何更改Windows8中的电源计划集

如何更改Windows8中的电源计划集

计划,如何更改,电源,电脑软件,点评:本文主要介绍了如何改变Windows 8中的电源规划方法,各位需要学习的朋友可以参考一下。 适用范围: Windows 8消费者预览 知识点分析: 更改Windows 8系统下的电源计划设置 操作步骤: 1、在控制面板上,将右上…

的过程cpqsetcpqset.exe系统的作用

的过程cpqsetcpqset.exe系统的作用

作用,系统,过程,电脑软件,exe,点评:Cpqset.exe是惠普休利特帕卡德配置模块,在惠普笔记本电脑通常出现的。这个过程是用于配置多媒体设备 进程文件:cpqset或cpqset.exe 过程名称:休利特帕卡德配置模块 过程类别:安全风险的过程 英文描述: cpqset…

调整虚拟硬盘的大小实现方法

调整虚拟硬盘的大小实现方法

硬盘,虚拟,方法,调整,大小,点评:如何提高Xen虚拟硬盘的大小也就是说,如何扩大Xen镜像文件的大小。这里是一个简短的介绍方便和需要的朋友。 今天,有人来到实验室,抱怨4GB的Xen虚拟磁盘配置,他们太小了,和系统2gb。所以这不足以安装一些工具,如JDK …

新的电脑网络游戏不能使一个游戏变

新的电脑网络游戏不能使一个游戏变

解决方案,能使,流畅,游戏,电脑软件,问题: 这种新的计算机组件,处理器酷睿i5 3470、华硕p8z77-v主板LX,hd7770存储卡的Radeon,金士顿4GB,电源是航嘉jumper450b。当电脑店安装构件使用鬼win7盘系统,现在连电脑网页游戏,单机游戏并不顺利。不知怎的,…

PHP操作数组的一些功能介绍

PHP操作数组的一些功能介绍

操作,数组,功能,电脑软件,PHP,在数组中搜索特定值,如果返回到true,返回false。 布尔in_array(混合针阵列草堆{,布尔严格}) 在数组中查找指定的健康,如果发现返回true,返回false 布尔array_eky_exists(混合键,数组) 在数组中搜索特定值,如果返回到tru…