利用PHP怎么对字符串函数建加密解密

  介绍

利用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怎么对字符串函数建加密解密