巅云智能建站平台搭建版(创业流派版)火爆上线,毕生受权!新增:文章智能收罗+全站真静态打包+都会分站+智能小法式+不法词过滤+H5自顺应+智能链词等功效功效概略
赞助文档Help

2个比拟典范的PHP加密解密函数分享

一佰互联网站建造(www.taishanly.com) 宣布日期 2020-04-29 09:01:08 阅读数: 116

名目中偶然咱们须要操纵PHP将特定的信息停止加密,也便是经由进程加密算法天生一个加密字符串,这个加密后的字符串能够经由进程解密算法停止解密,便于法式对解密后的信息停止处置。
最罕见的操纵在用户登录和一些API数据互换的场景。

笔者收录了一些比拟典范的PHP加密解密函数代码,分享给大师。加密解密道理普通都是经由进程必然的加密解密算法,将密钥插手到算法中,终究取得加密解密成果。
1、很是给力的authcode加密函数,Discuz!典范代码(带详解):
复制代码 代码以下:
function authcode($string, $operation = "DECODE", $key = "", $expiry = 0) {  
    // 静态密匙长度,不异的明文会天生差别密文便是依托静态密匙  
    $ckey_length = 4;  
      
    // 密匙  
    $key = md5($key ? $key : $GLOBALS["discuz_auth_key"]);  
      
    // 密匙a会到场加解密  
    $keya = md5(substr($key, 0, 16));  
    // 密匙b会用来做数据完全性考证  
    $keyb = md5(substr($key, 16, 16));  
    // 密匙c用于变更天生的密文  
    $keyc = $ckey_length ? ($operation == "DECODE" ? substr($string, 0, $ckey_length):
substr(md5(microtime()), -$ckey_length)) : "";  
    // 到场运算的密匙  
    $cryptkey = $keya.md5($keya.$keyc);  
    $key_length = strlen($cryptkey);  
    // 明文,前10位用来保管时候戳,解密时考证数占有用性,10到26位用来保管$keyb(密匙b),
//解密时会经由进程这个密匙考证数据完全性  
    // 若是是解码的话,会从第$ckey_length位起头,由于密文前$ckey_length位保管 静态密匙,以保障解密准确  
    $string = $operation == "DECODE" ? 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 == "DECODE") { 
        // 考证数占有用性,请看未加密明文的格局  
        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 {  
        // 把静态密匙保管在密文里,这也是为甚么一样的明文,出产差别密文后能解密的缘由  
        // 由于加密后的密文能够是一些特别字符,复制进程能够会丧失,以是用base64编码  
        return $keyc.str_replace("=", "", base64_encode($result));  
    }  
}

函数authcode($string, $operation, $key, $expiry)中的$string:字符串,明文或密文;$operation:DECODE表现解密,别的表现加密;$key:密匙;$expiry:密文有用期。

用法:
复制代码 代码以下:
$str = "abcdef";
$key = "www.helloweba.com";
echo authcode($str,"ENCODE",$key,0); //加密
$str = "56f4yER1DI2WTzWMqsfPpS9hwyoJnFP2MpC8SOhRrxO7BOk";
echo authcode($str,"DECODE",$key,0); //解密

2、加解密函数encrypt():
复制代码 代码以下:function encrypt($string,$operation,$key=""){
    $key=md5($key);
    $key_length=strlen($key);
      $string=$operation=="D"?base64_decode($string):substr(md5($string.$key),0,8).$string;
    $string_length=strlen($string);
    $rndkey=$box=array();
    $result="";
    for($i=0;$i<=255;$i++){
           $rndkey[$i]=ord($key[$i%$key_length]);
        $box[$i]=$i;
    }
    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=="D"){
        if(substr($result,0,8)==substr(md5(substr($result,8).$key),0,8)){
            return substr($result,8);
        }else{
            return"";
        }
    }else{
        return str_replace("=","",base64_encode($result));
    }
}

函数encrypt($string,$operation,$key)中$string:须要加密解密的字符串;$operation:判定是加密仍是解密,E表现加密,D表现解密;$key:密匙。
用法:
复制代码 代码以下:
$str = "abc";
$key = "www.helloweba.com";
$token = encrypt($str, "E", $key);
echo "加密:".encrypt($str, "E", $key);
echo "解密:".encrypt($str, "D", $key);

PS:对于加密手艺,本站还供给了以下加密东西供大师参考操纵:

MD5在线加密东西:http://tools.jb51.net/password/CreateMD5Password

Escape加密/解密东西:http://tools.jb51.net/password/escapepwd

在线SHA1加密东西:http://tools.jb51.net/password/sha1encode

短链(短网址)在线天生东西:http://tools.jb51.net/password/dwzcreate

短链(短网址)在线复原东西:http://tools.jb51.net/password/unshorturl

高强度暗码天生器:http://tools.jb51.net/password/CreateStrongPassword

一佰互联是天下着名建站品牌办事商,咱们有九年、网站建造、网页设想、php开辟和域名注册及假造主机办事经历,供给的办事更是天下着名。最近几年来还整合团队上风自立开辟了可视化多用户”“3.0平台版,拖拽排版网站建造设想,轻松完成pc站、手机微网站、小法式、APP一体化全网营销网站扶植 ,已胜利的为天下上百家收集公司供给自助建站平台搭建办事。

相干消息more

21
03月
很是好的病院网站体系模板,可网上专业征询预定

价钱:580~3000元/年演示病院网站体系在文章体系的根本上,预设了病院概略、消息静态、情况装备、名医聚集、专科先容、就诊指南、专家门诊值... >>概略

09
04月
设想生活生计的转机点在那里?看看这10位创意人的

转变老是不可避免的。不转变,就不明天的咱们。天天,转变都在以一种难以发觉的体例产生,悄无声气地成绩着咱们人生每座主要的里程碑,比方成婚... >>概略

09
04月
界面设想中,交互体例是挑选滑动仍是点击呢?

王M争:在界面设想中,咱们若何肯定方针元素的交互体例是滑动仍是点击呢?头几天在伴侣圈看到一条对于新版知乎(iOS端)的吐槽:本来的版本顶用户... >>概略

29
04月
PHP代码优化之成员变量取得速率对照

有以下4个代码示例,你以为他们建立工具,并且取得成员变量的速率排序是若何的?1:将成员变量设置为public,经由进程赋值操纵给成员变量赋值,直... >>概略

高端网站扶植

美工统筹SEO,为企业电子商务营销助力!

德律风:

023-85725751
建站

产物

域名注册 假造主机 云办事器 企业邮局
智能建站 APP打包 微站/小法式 创业平台
网站推行 媒体营销 智能收罗 AI机械人
400德律风 短信营销 店销机械人
私家定制 流派网站