zoukankan      html  css  js  c++  java
  • 具有时效性的 php加密解密函数!

    <?php 
    function encode_pass($tex,$key,$type="encode",$expiry=0){
        $chrArr=array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
                      'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
                      '0','1','2','3','4','5','6','7','8','9');
        if($type=="decode"){
            if(strlen($tex)<14)return false;
            $verity_str=substr($tex, 0,8);
            $tex=substr($tex, 8);
            if($verity_str!=substr(md5($tex),0,8)){
                //完整性验证失败
                return false;
            }    
        }
        $key_b=$type=="decode"?substr($tex,0,6):$chrArr[rand()%62].$chrArr[rand()%62].$chrArr[rand()%62].$chrArr[rand()%62].$chrArr[rand()%62].$chrArr[rand()%62];
        
        $rand_key=$key_b.$key;    
        //设置时间选项
        $modnum=0;$modCount=0;$modCountStr="";
        if($expiry>0){
            if($type=="decode"){
                $modCountStr=substr($tex,6,1);
                $modCount=$modCountStr=="a"?10:floor($modCountStr);
                $modnum=substr($tex,7,$modCount);
                $rand_key=$rand_key.(floor((time()-$modnum)/$expiry));
            }else{
                $modnum=time()%$expiry;
                $modCount=strlen($modnum);
                $modCountStr=$modCount==10?"a":$modCount;
                
                $rand_key=$rand_key.(floor(time()/$expiry));            
            }
            $tex=$type=="decode"?base64_decode(substr($tex, (7+$modCount))):"xugui".$tex;
        }else{
            $tex=$type=="decode"?base64_decode(substr($tex, 6)):"xugui".$tex;
        }
        $rand_key=md5($rand_key);


        $texlen=strlen($tex);
        $reslutstr="";
        for($i=0;$i<$texlen;$i++){
            $reslutstr.=$tex{$i}^$rand_key{$i%32};
        }
        if($type!="decode"){
            $reslutstr=trim(base64_encode($reslutstr),"==");
            $reslutstr=$modCount?$modCountStr.$modnum.$reslutstr:$reslutstr;
            $reslutstr=$key_b.$reslutstr;
            $reslutstr=substr(md5($reslutstr), 0,8).$reslutstr;
        }else{
            if(substr($reslutstr,0, 5)!="xugui"){
                return false;
            }
            $reslutstr=substr($reslutstr, 5);
        }
        return $reslutstr;
    }
    $psa=encode_pass("woshi ceshi yong de ","taintainxousad","encode",120);
    echo $psa;
    echo "\r\n解密:";
    echo encode_pass($psa,"taintainxousad",'decode',120);
    ?> 

    该函数具有时效性,只要过期就不能解密!

    通过时间动态加密 加密后数据多样化,增加破解难度

  • 相关阅读:
    Windows系统安装mysql5.7*时mysql服务启动失败的解决方法
    安装MySQL出现 This application requires Visual Studio 2013 x64 Redistributable.Please install the Redistributable then run this installer again
    Fiddler抓包流程
    C#使用NPOI根据模板生成Word文件功能实现
    .NET nhibernate 添加新的表运行报is not mapped的问题
    二进制原码、反码、补码和位运算
    【英语】面试常用语整理
    【检测分割算法整理】
    【Leetcode方法比较】DP/滑窗/前缀和
    【Leetcode】数学系列
  • 原文地址:https://www.cnblogs.com/mutuan/p/2760678.html
Copyright © 2011-2022 走看看