栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > PHP

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

PHP 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

四种好用的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; $i

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

示例: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 '
'; echo authcode('7d49kn9k07uSBZvha8as+/qm4UoLfpy88PFg12glPeDtlzc','key',true);

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/263386.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号