设为首页收藏本站

PHPIN.NET

 找回密码
 立即注册
查看: 457|回复: 0

[高级进阶] 可逆加密函数改dz的支持数组。

[复制链接]

32

主题

34

帖子

359

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
359
发表于 2014-12-19 23:56:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
  1. <?php
  2. /**
  3. $data 原文或者密文支持数组
  4. $operation 操作(0 | 1), 默认为0解密
  5. $key 密钥
  6. $expiry密文有效期, 加密时候有效, 单位 秒,0 为永久有效
  7. */
  8. header("Content-type:text/html;charset=utf-8");
  9. function authcode($data,$key='www.phpin.net',$operation=0,$expiry=0){
  10.     $ckey_length=6;
  11.     $keya=sha1($key);
  12.     $keyb=substr(md5($key),$ckey_length);
  13.     $data=$operation==0?$data:serialize($data);
  14.     $keyc=$ckey_length ? ($operation==0 ? substr($data,0,$ckey_length):substr(md5(microtime()),-$ckey_length)):'';
  15.     $cryptkey=$keya.md5($keya.$keyc);
  16.     $key_length=strlen($cryptkey);
  17.     $data=$operation==0 ? base64_decode(substr($data,$ckey_length)):sprintf('%010d',$expiry ? $expiry+time():0).substr(md5($data.$keyb),0,16).$data;
  18.     $data_length=strlen($data);
  19.     $result='';
  20.     $box=range(0,255);
  21.     $rndkey=array();
  22.     for($i=0;$i<=255;$i++){
  23.         $rndkey[$i]=ord($cryptkey[$i%$key_length]);
  24.     }
  25.     for($j=$i=0;$i<256;$i++){
  26.         $j=($j+$box[$i]+$rndkey[$i])%256;
  27.         $tmp=$box[$i];
  28.         $box[$i]=$box[$j];
  29.         $box[$j]=$tmp;
  30.     }
  31.     for($a=$j=$i=0;$i<$data_length;$i++){
  32.         $a=($a+1)%256;
  33.         $j=($j+$box[$a])%256;
  34.         $tmp=$box[$a];
  35.         $box[$a]=$box[$j];
  36.         $box[$j]=$tmp;
  37.         $result.=chr(ord($data[$i]) ^ ($box[($box[$a]+$box[$j])%256]));
  38.     }
  39.     if($operation==0){
  40.         if((substr($result,0,10)==0||substr($result,0,10)-time()>0)&&substr($result,10,16)==substr(md5(substr($result,26).$keyb),0,16)){
  41.             return unserialize(substr($result,26));
  42.         }else{
  43.             return '';
  44.         }
  45.     }else{
  46.         return $keyc.str_replace('=','',base64_encode($result));
  47.     }

  48. }

  49. echo  $a = authcode(array(1,'fsdg',3),'www.yonglan.net',1);
  50. echo '<br />';
  51. $b = authcode($a,'www.yonglan.net');  //支持数组
  52. print_r($b);
  53. echo '<br />';
  54. echo $a = authcode('15128282867', 'key', 1,3600);
  55. echo '<br />';
  56. echo  $b = authcode($a, 'key'); // 在一个小时内,$b(abc),否则 $b 为空
  57. echo '<br />';
复制代码


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|PHPIN.NET ( 冀ICP备00000001号 )|网站地图  

GMT+8, 2016-12-3 23:37

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表