欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

具有时效性的php加密解密函数代码

程序员文章站 2022-10-06 11:52:07
复制代码 代码如下:

复制代码 代码如下:

<?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);
?>

该函数具有时效性,只要过期就不能解密!通过时间动态加密 加密后数据多样化,增加破解难度