esc0rp 发表于 2024-7-11 02:03:23

一个经典的PHP加密解密算法


    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">项目中有时<span style="color: black;">咱们</span><span style="color: black;">必须</span><span style="color: black;">运用</span>PHP将特定的信息进行加密,<span style="color: black;">亦</span><span style="color: black;">便是</span><span style="color: black;">经过</span>加密算法生成一个加密字符串,这个加密后的字符串<span style="color: black;">能够</span><span style="color: black;">经过</span>解密算法进行解密,便于程序对解密后的信息进行处理。</p>最<span style="color: black;">平常</span>的应用在用户登录以及<span style="color: black;">有些</span>API数据交换的场景。
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">最<span style="color: black;">平常</span>的应用在用户登录以及<span style="color: black;">有些</span>API数据交换的场景。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">笔者收录了<span style="color: black;">有些</span>比较经典的PHP加密解密函数代码,分享给<span style="color: black;">大众</span>。加密解密原理<span style="color: black;">通常</span>都是<span style="color: black;">经过</span><span style="color: black;">必定</span>的加密解密算法,将密钥加入到算法中,<span style="color: black;">最后</span>得到加密解密结果。</p>1、非常给力的authcode加密函数,Discuz!经典代码(带详解):
    <div style="color: black; text-align: left; margin-bottom: 10px;"><img src="https://pic2.zhimg.com/80/v2-51e409b11aa51c150090697429a953ed_720w.webp" style="width: 50%; margin-bottom: 20px;"></div>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">function authcode($string, $operation = DECODE, $key = , $expiry = 0)</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">{</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"> // 动态密匙长度,相同的明文会生成<span style="color: black;">区别</span>密文<span style="color: black;">便是</span>依靠动态密匙</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">$ckey_length = 4;</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"> // 密匙</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">$key = md5($key ? $key : $GLOBALS);</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"> // 密匙a会参与加解密</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">$keya = md5(substr($key, 0, 16));</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"> // 密匙b会用来做数据完整性验证</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">$keyb = md5(substr($key, 16, 16));</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"> // 密匙c用于变化生成的密文</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">$keyc = $ckey_length ? ($operation == DECODE ? substr($string, 0, $ckey_length) :</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"> substr(md5(microtime()), -$ckey_length)) : ;</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"> // 参与运算的密匙</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">$cryptkey = $keya . md5($keya . $keyc);</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"> $key_length = strlen($cryptkey);</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">// 明文,前10位用来<span style="color: black;">保留</span>时间戳,解密时验证数据有效性,10到26位用来<span style="color: black;">保留</span>$keyb(密匙b),</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"> //解密时会<span style="color: black;">经过</span>这个密匙验证数据完整性</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"> // <span style="color: black;">倘若</span>是解码的话,会从第$ckey_length位<span style="color: black;">起始</span>,<span style="color: black;">由于</span>密文前$ckey_length位<span style="color: black;">保留</span> 动态密匙,以<span style="color: black;">保准</span>解密正确</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">$string = $operation == DECODE ? base64_decode(substr($string, $ckey_length)) : sprintf(%010d, $expiry ? $expiry + time() : 0) . substr(md5($string . $keyb), 0, 16) . $string;</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">$string_length = strlen($string);</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"> $result = ;</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"> $box = range(0, 255);</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"> $rndkey = array();</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"> // 产生密匙簿</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">for ($i = 0; $i &lt;= 255; $i++) {</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">$rndkey[$i] = ord($cryptkey[$i % $key_length]);</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"> }</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"> // 用固定的算法,打乱密匙簿,<span style="color: black;">增多</span>随机性,<span style="color: black;">好似</span>很<span style="color: black;">繁杂</span>,<span style="color: black;">实质</span>上对并不会<span style="color: black;">增多</span>密文的强度</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">for ($j = $i = 0; $i &lt; 256; $i++) {</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"> $j = ($j + $box[$i] + $rndkey[$i]) % 256;</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"> $tmp = $box[$i];</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">$box[$i] = $box[$j];</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"> $box[$j] = $tmp;</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"> }</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"> // 核心加解密部分</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">for ($a = $j = $i = 0; $i &lt; $string_length; $i++) {</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"> $a = ($a + 1) % 256;</p>$j = ($




流星的美 发表于 2024-8-29 18:17:20

外链论坛的成功举办,是与各位领导、同仁们的关怀和支持分不开的。在此,我谨代表公司向关心和支持论坛的各界人士表示最衷心的感谢!

nykek5i 发表于 2024-9-10 07:20:13

一看到楼主的气势,我就觉得楼主同在社区里灌水。

m5k1umn 发表于 2024-9-28 10:06:49

你字句如珍珠,我珍藏这份情。

1fy07h 发表于 2024-10-7 04:43:41

认真阅读了楼主的帖子,非常有益。

4zhvml8 发表于 2024-10-9 11:14:55

“板凳”(第三个回帖的人)‌

qzmjef 发表于 2024-10-10 07:48:17

谷歌外链发布 http://www.fok120.com/

m5k1umn 发表于 2024-11-11 06:40:05

你的话语真是温暖如春,让我心生感激。

4lqedz 发表于 3 天前

太棒了、厉害、为你打call、点赞、非常精彩等。
页: [1]
查看完整版本: 一个经典的PHP加密解密算法