具有时效性的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);

  ?>

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