分享几种好用的PHP自定义加密函数(可逆/不可逆)
项目中有时我们需要使用PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这些加密后的字符串可以通过解密算法进行解密,便于程序对解密后的信息进行处理。最常见的应用在用户登录以及一些API数据交换的场景。最常见的应用在用户登录以及一些API数据交换的场景。加密解密原理一般都是通过一定的加密解密算法,将密钥加入到算法中,最终得到加密解密结果。
u=3837593897,2803417633&fm=26&gp=0.jpg
废话不多说,直接上代码。
一、第一种针对于ID的可逆加密函数,也可以用作于邀请码之类的,解密后的数据比较简单
示例:lockcode(28)=》000Xunlockcode('000X')=》28
//加密函数
functionlockcode($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;
}
//解密函数
functionunlockcode($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')=》nkiV93IfJdecrypt('nkiV93IfJ','1234')=》abcd
//加密函数
functionencrypt($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
三、第三种跟上面的比较类似,也支持盐值参数
示例:encrypt('abcd','1234')=》mZPHxw==decrypt('mZPHxw==','1234')=》abcd
functionencrypt($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);
}
functiondecrypt($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))
四、这个是我用过最好用的一个了,discuz中使用的加密解密算法
//加密算法
functionauthcode($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'
';
echoauthcode('7d49kn9k07uSBZvha8as+/qm4UoLfpy88PFg12glPeDtlzc','key',true);
以上几种都是比较好用且是我自己常用的分享给大家,大家如果想要了解其他的加密函数或者有什么建议可以在底部留言。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。