教育专题
**
当前页面: 首页 > 专题 > PHP自定义加密函数整理,帮你轻松理解!

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

75 2021-07-27 16:58:34

  项目中有时我们需要使用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);

免责声明

非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其他问题,请及时与本网联系,我们将及时删除内容。

相关专题

少儿英语怎么练比较有效?少儿英语哪个平台比较好呢?
不知道大家发现没有,现在的学校起码有半数以上的孩子都有上英语相关的课外辅导班,但因为疫情的缘故,之前大部分在线下学的都换成了上网课,所以现在少儿英语网课平台很吃香,但是这种平台选择不比线下少,也是让家
来源:1 43 2021-07-27