当前位置:首页 > PHP教程 > php函数 > 列表

分享几种好用的PHP自定义加密函数(可逆/不可逆)

发布:smiling 来源: PHP粉丝网  添加日期:2022-03-27 09:35:48 浏览: 评论:0 

最近的项目中一直有用到加密函数,今天来给大家推荐几个好用且我自己常用的加密函数,这几个都是可逆的加密函数,其中也有针对于ID的加密函数,需要的朋友可以参考下。

项目中有时我们需要使用PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这些加密后的字符串可以通过解密算法进行解密,便于程序对解密后的信息进行处理。最常见的应用在用户登录以及一些API数据交换的场景。

最常见的应用在用户登录以及一些API数据交换的场景。加密解密原理一般都是通过一定的加密解密算法,将密钥加入到算法中,最终得到加密解密结果。

u=3837593897,2803417633&fm=26&gp=0.jpg

废话不多说,直接上代码。

一、第一种针对于ID的可逆加密函数,也可以用作于邀请码之类的,解密后的数据比较简单

示例:lockcode(28)=》000X unlockcode('000X')=》28

  1. //加密函数 
  2. function lockcode($code) { 
  3.  static $source_string = 'E5FCDG3HQA4B1NOPIJ2RSTUV67MWX89KLYZ'
  4.  $num = $code
  5.  $code = ''
  6.  while ( $num > 0) { 
  7.   $mod = $num % 35; 
  8.   $num = ($num - $mod) / 35; 
  9.   $code = $source_string[$mod].$code
  10.  } 
  11.  if(emptyempty($code[3])) 
  12.   $code = str_pad($code,4,'0',STR_PAD_LEFT); 
  13.  return $code
  14. //解密函数 
  15. function unlockcode($code) { 
  16.  static $source_string = 'E5FCDG3HQA4B1NOPIJ2RSTUV67MWX89KLYZ'
  17.  if (strrpos($code'0') !== false) 
  18.   $code = substr($codestrrpos($code'0')+1); 
  19.  $len = strlen($code); 
  20.  $code = strrev($code); 
  21.  $num = 0; 
  22.  for ($i=0; $i < $len$i++) { 
  23.   $num += strpos($source_string$code[$i]) * pow(35, $i); 
  24.  } 
  25.  return $num

二、第二种是加密函数是我在网上搜索来的,很好用,可逆加密,支持盐值参数

示例:encrypt('abcd','1234')=》nkiV93IfJ decrypt('nkiV93IfJ','1234')=》abcd

  1. //加密函数  
  2. function encrypt($data,$key='CHENI'){  
  3.  $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";  
  4.  $nh = rand(0,64);  
  5.  $ch = $chars[$nh];  
  6.  $mdKey = md5($key.$ch);  
  7.  $mdKey = substr($mdKey,$nh%8, $nh%8+7);  
  8.  $database64_encode($data);  
  9.  $tmp = '';  
  10.  $i=0;$j=0;$k = 0;  
  11.  for ($i=0; $i<strlen($data); $i++) {  
  12.   $k = $k == strlen($mdKey) ? 0 : $k;  
  13.   $j = ($nh+strpos($chars,$data[$i])+ord($mdKey[$k++]))%64;  
  14.   $tmp .= $chars[$j];  
  15.  }  
  16.  return urlencode($ch.$tmp);  
  17. //解密函数  
  18. function decrypt($data,$key='CHENI'){ 
  19.  $txt = urldecode($data);  
  20.  $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";  
  21.  $ch = $txt[0];  
  22.  $nh = strpos($chars,$ch);  
  23.  $mdKey = md5($key.$ch);  
  24.  $mdKey = substr($mdKey,$nh%8, $nh%8+7);  
  25.  $txt = substr($txt,1);  
  26.  $tmp = '';  
  27.  $i=0;$j=0; $k = 0;  
  28.  for ($i=0; $i<strlen($txt); $i++) {  
  29.   $k = $k == strlen($mdKey) ? 0 : $k;  
  30.   $j = strpos($chars,$txt[$i])-$nh - ord($mdKey[$k++]);  
  31.   while ($j<0) $j+=64;  
  32.   $tmp .= $chars[$j];  
  33.  }  
  34.  return base64_decode($tmp);  

三、第三种跟上面的比较类似,也支持盐值参数

示例:encrypt('abcd','1234')=》mZPHxw== decrypt('mZPHxw==','1234')=》abcd

  1. function encrypt($data$key) {  
  2.  $char=""
  3.  $str=""
  4.  $key = md5($key);  
  5.  $x  = 0;  
  6.  $len = strlen($data);  
  7.  $l  = strlen($key);  
  8.  for ($i = 0; $i < $len$i++) {  
  9.   if ($x == $l) { $x = 0; }  
  10.   $char .= $key{$x};  
  11.   $x++;  
  12.  }  
  13.  for ($i = 0; $i < $len$i++){  
  14.   $str .= chr(ord($data{$i}) + (ord($char{$i})) % 256);  
  15.  }  
  16.  return base64_encode($str);  
  17. }  
  18. function decrypt($data$key) {  
  19.  $key = md5($key);  
  20.  $x = 0;  
  21.  $data = base64_decode($data);  
  22.  $len = strlen($data);  
  23.  $l = strlen($key);  
  24.  for ($i = 0; $i < $len$i++) {  
  25.   if ($x == $l){ $x = 0;}  
  26.   $char .= substr($key$x, 1);  
  27.   $x++;  
  28.  }  
  29.  for ($i = 0; $i < $len$i++){  
  30.   if (ord(substr($data$i, 1)) < ord(substr($char$i, 1))){  
  31.    $str .= chr((ord(substr($data$i, 1)) + 256) - ord(substr($char$i, 1)));  
  32.   }else{  
  33.    $str .= chr(ord(substr($data$i, 1)) - ord(substr($char$i, 1)));  
  34.   }  
  35.  }  
  36.  return $str;  

四、这个是我用过最好用的一个了,discuz中使用的加密解密算法

  1. //加密算法 
  2.  function authcode($string,$key='',$operation=false,$expiry=0){ 
  3.   $ckey_length = 4; 
  4.   $key = md5($key ? $key : DEFAULT_KEYS); 
  5.   $keya = md5(substr($key, 0, 16)); 
  6.   $keyb = md5(substr($key, 16, 16)); 
  7.   $keyc = $ckey_length ? ($operationsubstr($string, 0, $ckey_length):substr(md5(microtime()), -$ckey_length)) : ''
  8.   $cryptkey = $keya.md5($keya.$keyc); 
  9.   $key_length = strlen($cryptkey); 
  10.   $string = $operationbase64_decode(substr($string$ckey_length)) : 
  11.   sprintf('%010d'$expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string
  12.   $string_length = strlen($string); 
  13.   $result = ''
  14.   $box = range(0, 255); 
  15.   $rndkey = array(); 
  16.   for($i = 0; $i <= 255; $i++) { 
  17.    $rndkey[$i] = ord($cryptkey[$i % $key_length]); 
  18.   } 
  19.   for($j = $i = 0; $i < 256; $i++) { 
  20.    $j = ($j + $box[$i] + $rndkey[$i]) % 256; 
  21.    $tmp = $box[$i]; 
  22.    $box[$i] = $box[$j]; 
  23.    $box[$j] = $tmp
  24.   } 
  25.   for($a = $j = $i = 0; $i < $string_length$i++) { 
  26.    $a = ($a + 1) % 256; 
  27.    $j = ($j + $box[$a]) % 256; 
  28.    $tmp = $box[$a]; 
  29.    $box[$a] = $box[$j]; 
  30.    $box[$j] = $tmp
  31.    $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256])); 
  32.   } 
  33.   if($operation) { 
  34.    if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && 
  35.     substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) { 
  36.     return substr($result, 26); 
  37.    } else { 
  38.     return ''
  39.    } 
  40.   } else { 
  41.    return $keyc.str_replace('='''base64_encode($result)); 
  42.   } 
  43.  } 
  44.  echo authcode('123456','key'); 
  45.  echo '<br>'
  46.  echo authcode('7d49kn9k07uSBZvha8as+/qm4UoLfpy88PFg12glPeDtlzc','key',true);

Tags: PHP自定义加密函数

分享到: