PHP自定义加密函数整理,帮你轻松理解!

项目中有时我们需要使用PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这些加密后的字符串可以通过***算法进行***,便于程序对***后的信息进行处理。
**常见的应用在用户登录以及一些API数据交换的场景。**常见的应用在用户登录以及一些API数据交换的场景。加密***原理一般都是通过一定的加密***算法,将密钥加入到算法中,**终得到加密***结果。
废话不多说,直接上代码。
一、第一种针对于ID的可逆加密函数,也可以用作于邀请码之类的,***后的数据比较简单
示例:lockcode(28)=》000Xunlockcode('000X')=》28
//加密函数
function
lockcode($code){
static$source_string=
'E5FCDG3HQA4B1NOPIJ2RSTUV67MWX89KLYZ';
$num=$code;
$code='';
while($num>0){
$mod=$num%35;
$num=($num-$mod)/35;
$code=$source_string[$mod].$code;
}
if(empty($code[3]))
$code=
str_pad($code,4,'0',STR_PAD_LEFT);
return$code;
}
//***函数
function
unlockcode($code){
static$source_string=
'E5FCDG3HQA4B1NOPIJ2RSTUV67MWX89KLYZ';
if(strrpos($code,'0')!==false)
$code=substr($code,strrpos($code,
'0')+1);
$len=strlen($code);
$code=strrev($code);
$num=0;
for($i=0;$i<$len;$i++){
$num+=strpos($source_string,
$code[$i])*pow(35,$i);
}
return$num;
}
二、第二种是加密函数是我在网上搜索来的,很好用,可逆加密,支持盐值参数
示例:
encrypt('abcd','1234')=》nkiV93IfJ
decrypt('nkiV93IfJ','1234')=》abcd
//加密函数
function
encrypt($data,$key='CHENI'){
$chars=
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789;
$nh=rand(0,64);
$ch=$chars[$nh];
$mdKey=md5($key.$ch);
$mdKey=substr($mdKey,$nh%8,
$nh%8+7);
$data=base64_encode($data);
$tmp='';
$i=0;$j=0;$k=0;
for($i=0;$i
{
$k=$k==strlen($mdKey)?0:
$k;
$j=
($nh+strpos($chars,$data[$i])+ord($mdKey[$k++]))%64;
$tmp.=$chars[$j];
}
returnurlencode($ch.$tmp);
}
//***函数
function
decrypt($data,$key='CHENI'){
$txt=urldecode($data);
$chars=
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789;
$ch=$txt[0];
$nh=strpos($chars,$ch);
$mdKey=md5($key.$ch);
$mdKey=substr($mdKey,$nh%8,
$nh%8+7);
$txt=substr($txt,1);
$tmp='';
$i=0;$j=0;$k=0;
for($i=0;$i
$k=$k==strlen($mdKey)?0:
$k;
$j=strpos($chars,$txt[$i])-$nh-
ord($mdKey[$k++]);
while($j<0)$j+=64;
$tmp.=$chars[$j];
}
returnbase64_decode($tmp);
}
三、第三种跟上面的比较类似,也支持盐值参数
示例:encrypt('abcd','1234')=》mZPHxw==
decrypt('mZPHxw==','1234')=》abcd
function
encrypt($data,$key) {
$char=;
$str=;
$key = md5($key);
$x = 0;
$len = strlen($data);
$l = strlen($key);
for($i=0;$i<$len;$i++){
if($x==$l){$x=0;}
$char.=$key{$x};
$x++;
}
for($i=0;$i<$len;$i++){
$str.=chr(ord($data{$i})+
(ord($char{$i}))%256);
}
returnbase64_encode($str);
}
function
decrypt($data,$key){
$key=md5($key);
$x=0;
$data=base64_decode($data);
$len=strlen($data);
$l=strlen($key);
for($i=0;$i<$len;$i++){
if($x==$l){$x=0;}
$char.=substr($key,$x,1);
$x++;
}
for($i=0;$i<$len;$i++){
if(ord(substr($data,$i,1))<
ord(substr($char,$i,1))){
$str.=chr((ord(substr($data,$i,
1))+256)-ord(substr($char,$i,1)));
}else{
$str.=chr(ord(substr($data,$i,
1))-ord(substr($char,$i,1)));
}
}
return$str;
}
四、这个是我用过**好用的一个了,discuz中使用的加密***算法
//加密算法
function
authcode($string,$key='',$operation=false,$expiry=0){
$ckey_length=4;
$key=md5($key?$key:DEFAULT_KEYS);
$keya=md5(substr($key,0,16));
$keyb=md5(substr($key,16,16));
$keyc=$ckey_length?($operation?
substr($string,0,$ckey_length):substr(md5(microtime()),-$ckey_length)):'';
$cryptkey=$keya.md5($keya.$keyc);
$key_length=strlen($cryptkey);
$string=$operation?
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=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){
if((substr($result,0,10)==0||
substr($result,0,10)-time()>0)&&
substr($result,10,16)==
substr(md5(substr($result,26).$keyb),0,16)){
returnsubstr($result,26);
}else{
return'';
}
}else{
return$keyc.str_replace('=','',
base64_encode($result));
}
}
echoauthcode('123456','key');
echo'
';
echo
authcode('7d49kn9k07uSBZvha8as+/qm4UoLfpy88PFg12glPeDtlzc','key',true);
非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其他问题,请及时与本网联系,我们将及时删除内容。