介绍
利用PHP怎么对字符串函数建加密解密?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
<强> 1,验证码加密函数强>
function 验证码(字符串,美元,美元operation =, & # 39;解码# 39;,,key 美元;=,& # 39;& # 39;,,expiry 美元;=,0),{, ,//动态密匙长度,相同的明文会生成不同密文就是依靠动态密匙,=,美元ckey_length 4,, ,//密匙, ,key 美元;=,md5 (key 美元;?,key 美元;:,全局美元[& # 39;discuz_auth_key& # 39;]),, ,//密匙一个会参与加解密, ,keya 美元;=,md5 (substr(美元关键,,0,,16)),, ,//密匙b会用来做数据完整性验证, ,keyb 美元;=,md5 (substr(键,美元,16日,16)),, ,//密匙c用于变化生成的密文, ,keyc 美元;=,ckey_length 美元;?,(operation 美元;==,& # 39;解码# 39;,?,substr(字符串,美元,0,,ckey_length美元):, substr (md5(()),至ckey_length美元)),:,& # 39;& # 39;,, ,//参与运算的密匙, 美元,美元cryptkey =, keya.md5 (keya。keyc美元);, ,key_length 美元;=,strlen (cryptkey美元),, ,//明文,前10位用来保存时间戳,解密时验证数据有效性,10到26位用来保存美元keyb(密匙b),,//解密时会通过这个密匙验证数据完整性, ,//如果是解码的话,会从第$ ckey_length位开始,因为密文前美元ckey_length位保存,动态密匙,以保证解密正确, 美元,美元string =, operation ==, & # 39;解码# 39;,?,base64_decode (substr ($ string, ckey_length美元)),:, sprintf (& # 39; % 010 d # 39;,, expiry 美元;?,expiry 美元;+,时间(),:,0).substr (md5(字符串。keyb美元),0,,16)。字符串;美元, ,string_length 美元;=,strlen(字符串),, ,result 美元;=,& # 39;& # 39;,, ,box 美元;=,范围(0,255),, 数组,rndkey 美元;=,();, ,//产生密匙簿, ,($小姐:=,0;,美元小姐:& lt;=, 255;,我+ +美元),{, 美元,美元rndkey[我],=,奥德(cryptkey美元(美元小姐:%,$ key_length]),, }大敌; ,//用固定的算法,打乱密匙簿,增加随机性,好像很复杂,实际上对并不会增加密文的强度, ,(小姐:美元$ j =,=, 0;,美元小姐:& lt;, 256;,我+ +美元),{, ,j 美元;=,(j 美元;+,盒子美元($ i), +, rndkey美元[$ i]), %, 256,,=,tmp 美元,美元($ i)盒;, ,美元框($ i)=,盒子[j]美元;美元, ,盒子[j]美元美元=,tmp;美元, }大敌; ,//核心加解密部分, ,(j 美元$ a =,=,小姐:美元=,0;,美元小姐:& lt;, string_length;美元,美元我+ +),{, 美元,美元a =, (a +, 1), %, 256,, ,j 美元;=,(j 美元;+,盒子美元[美元]),%,256,, 美元,美元tmp =,盒子[美元];, ,盒子[美元]美元=,盒子[j]美元;美元, ,盒子[j]美元美元=,tmp;美元, ,//从密匙簿得出密匙进行异或,再转成字符, result 美元。=,空空(奥德($ string [$ i]), ^,盒子($((箱美元(美元),+,盒子美元[j]美元),%,256])),, }大敌; ,如果(operation 美元==,& # 39;解码# 39;),{, ,//验证数据有效性,请看未加密明文的格式, ,如果(substr(因此,美元,0,10),==,0,| |,substr(因此,美元,0,10),安康;时间(),祝辞,0),,,, substr(因此,美元,10日,16),==,substr (md5 (substr(美元的结果,,26)。keyb美元),,0,,16)),{, return 才能substr(因此,美元,26),, {}大敌;else return 才能;& # 39;& # 39;,, }大敌; {}大敌;else ,//把动态密匙保存在密文里,这也是为什么同样的明文,生产不同密文后能解密的原因, ,//因为加密后的密文可能是一些特殊字符,复制过程可能会丢失,所以用base64编码, ,return keyc.str_replace美元(& # 39;=& # 39;,,& # 39;& # 39;,,base64_encode(结果)美元),, }大敌; }
函数验证码(字符串,操作,美元美元关键,到期美元)中美元的字符串:字符串,明文或密文;美元操作:解码表示解密,其它表示加密;美元关键:密匙;美元到期:密文有效期。
<强>用法:强>
str 美元;=,& # 39;六边形abcdef # 39;,, 时间=美元key & # 39; www.helloweba.com& # 39;,, echo 验证码(str美元,& # 39;编码# 39;,美元键,0),,//加密, 时间=美元str & # 39; 56 f4yer1di2wtzwmqsfpps9hwyojnfp2mpc8sohrrxo7bok& # 39;,, echo 验证码(str美元,& # 39;解码# 39;,美元键,0),,//解密
<强> 2,加解密函数加密():强>
function 加密(字符串,操作,美元$关键=& # 39;& # 39;){, 美元,美元关键=md5(键),, 美元,美元key_length=strlen(键),, 美元,字符串操作=$==& # 39;d # 39; ? base64_decode(字符串)美元:substr (md5(字符串。美元键),0,8)。字符串;美元, 美元,美元string_length=strlen(字符串),, ,$ rndkey=$盒=数组();, 美元,结果=& # 39;& # 39;,, ,(我=0;i利用PHP怎么对字符串函数建加密解密