当前位置:首页 > PHP教程 > 正文内容

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

搜教程4年前 (2020-01-09)PHP教程183

关于在php中使用curl发送get请求时参数传递问题的解析_php教程

get请求是最简单的请求,但是需要注意自己的请求是http请求还是https请求,因为https请求时需要关闭SSL验证,不然无法通过验证,没有办法请求到数据。

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

php上传文件找不到临时文件夹(解决方法)_php教程

一、配置文件没有设置临时文件夹;二、临时文件夹没有或者上级文件夹没有相应的权限。

//加密函数  
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<strlen($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; $i<strlen($txt); $i++) {  
        $k = $k == strlen($mdKey) ? 0 : $k;  
        $j = strpos($chars,$txt[$i])-$nh - ord($mdKey[$k++]);  
        while ($j<0) $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自定义加密函数(可逆/不可逆)的详细内容,更多请关注ki4网其它相关文章!

php会话处理分析_php教程

php进行会话处理会经历如下几个步骤:1、启动会话;2、获取会话ID;3、创建会话变量;4、修改和删除会话变量;5、销毁会话。

扫描二维码推送至手机访问。

版权声明:本文由搜教程网发布,如需转载请注明出处。

本文链接:https://www.sojiaocheng.cn/16898.html

标签: PHP
分享给朋友:

“四种好用的PHP自定义加密函数(可逆/不可逆)_php教程,PHP” 的相关文章

php closedir函数怎样用【php教程】,closedir函数

php closedir函数怎样用【php教程】,closedir函数

php closedir()函数用于封闭目次句柄,其语法是closedir(dir_handle),参数dir_handle可选,指定之前由 opendir() 翻开的目次句柄资本。假如该参数未指定,则运用末了一个由 opendir() 翻开的链接。 php closedir函数怎样用?...

PHP运用递归生成子数组(代码实例)【php教程】,PHP递归,子数组

PHP运用递归生成子数组(代码实例)【php教程】,PHP递归,子数组

给定一个数组,运用递归生成给定数组的一切能够的子数组。本篇文章就将给人人引见如何用PHP来完成此功用。 例子: 输入:[1,2,3] 输出:[1],[1,2],[2],[1,2,3],[2,3],[3] 输入:[1,2] 输出:[1],[1,2],[2] 要领: 我们运用两个指针star...

PHP怎样猎取文件的mime范例?(代码示例)【php教程】,PHP,mime类型,mime_content_type()

PHP怎样猎取文件的mime范例?(代码示例)【php教程】,PHP,mime类型,mime_content_type()

在PHP中能够运用内置函数mime_content_type()函数来猎取文件的mime范例,下面本篇文章就来带人人相识一下mime_content_type()函数,看看mime_content_type()函数是怎样猎取文件的mime范例的。 me_content_type()函数...

TP5读取txt文件的代码示例【php教程】,php

本篇文章给人人带来的内容是关于TP5读取txt文件的代码示例,有肯定的参考价值,有须要的朋侪能够参考一下,愿望对你有所协助。 1、读取文件将txt文件放入 public 文件夹中。(这是我TXT里的数据格式) 324654658654 FASDREWRQERWE FASB...

PHP中strlen()函数怎样用【php教程】,PHP,strlen()

PHP中strlen()函数怎样用【php教程】,PHP,strlen()

strlen函数是PHP中的一个内置函数,它能够盘算字符串的长度,包括一切空格和特别字符;它会将给定字符串作为参数并返回其长度。【视频教程引荐:PHP教程】 基础语法 strlen($string) 参数: strlen()函数只接收一个参数$ string,这是必须的。此参数示意须要...

接口断绝准绳是什么?【php教程】,接口隔离原则

接口断绝准绳是什么?【php教程】,接口隔离原则

客户端不应该依靠它不需要的接口;一个类对另一个类的依靠应该竖立在最小的接口上。 应用多个特地的接口比应用单一的总接口要好。 一个类对别的一个类的依靠性应该是竖立在最小的接口上的。 一个接口代表一个角色,不应该将差别的角色都交给一个接口。没有关联的接口兼并在一起,构成一个痴肥的大接口,这是对...