PHPIN.NET

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

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

[复制链接]

34

主题

2

回帖

731

积分

管理员

Rank: 9Rank: 9Rank: 9

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

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

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

x

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

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

AuthCode.php (2.1 KB, 下载次数: 1)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-26 01:54

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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