首页后端开发PHP四种好用的PHP自定义加密函数(可逆/不可逆)

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

时间2024-02-02 00:05:02发布访客分类PHP浏览695
导读:收集整理的这篇文章主要介绍了四种好用的PHP自定义加密函数(可逆/不可逆),觉得挺不错的,现在分享给大家,也给大家做个参考。项目中有时我们需要使用PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这些加密后的字符串可以通过解...
收集整理的这篇文章主要介绍了四种好用的PHP自定义加密函数(可逆/不可逆),觉得挺不错的,现在分享给大家,也给大家做个参考。项目中有时我们需要使用PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这些加密后的字符串可以通过解密算法进行解密,便于程序对解密后的信息进行处理。

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

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

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

示例:lockcode(28)=》000X unlockcode('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;
     $istrlen($data);
 $i++) {
              $k = $k == strlen($mdKey) ? 0 : $k;
              $j = ($nh+strpos($chars,$data[$i])+ord($mdKey[$k++]))%64;
              $tmp .= $chars[$j];
      }
          return urlencode($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;
     $istrlen($txt);
 $i++) {
              $k = $k == strlen($mdKey) ? 0 : $k;
              $j = strpos($chars,$txt[$i])-$nh - ord($mdKey[$k++]);
              while ($j0) $j+=64;
              $tmp .= $chars[$j];
      }
          return base64_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);
      }
          return base64_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)) {
                    return substr($result, 26);
            }
 else {
                    return '';
            }
        }
 else {
                return $keyc.str_replace('=', '', base64_encode($result));
        }
    }
        echo authcode('123456','key');
        echo 'br>
    ';
        echo authcode('7d49kn9k07usbZvha8as+/qm4UoLfpy88PFg12glPeDtlzc','key',true);
    

更多PHP相关知识,请访问PHP教程!

以上就是四种好用的PHP自定义加密函数(可逆/不可逆)的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 四种好用的PHP自定义加密函数(可逆/不可逆)
本文地址: https://pptw.com/jishu/596097.html
关于编译安装msgpack-php的方法 PHP 跨域之header函数(代码示例)

游客 回复需填写必要信息