分享几种好用的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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。