转的,原来应该是discuz中弄的

 <?php
//加解密函数
//此函数的厉害之处在于可以在指定时间内加密还原字符串,超时无法还原。
//这样我们就可以拿此函数来做很多用途了,比如:单点登录的token加密传输啦,临时密码啦等等。 /**
* @param string $string 原文或者密文
* @param string $operation 操作(ENCODE加密 | DECODE解密), 默认为 DECODE
* @param string $key 密钥
* @param int $expiry 密文有效期, 加密时候有效, 单位 秒,0 为永久有效
* @return string 处理后的 原文或者 经过 base64_encode 处理后的密文
*
* @example
*
*
* echo $encode = authcode('abc','ENCODE','key',3600);
* echo '<br />';
* 解密
* echo $decode = authcode($encode,'DECODE','key'); // 在一个小时内有效(abc),否则 $b 为空
*/ ?> <?php
function authcode($string, $operation = 'DECODE', $key = '', $expiry = 3600)
{
$ckey_length = 4;
// 随机密钥长度 取值 0-32;
// 加入随机密钥,可以令密文无任何规律,即便是原文和密钥完全相同,加密结果也会每次不同,增大破解难度。
// 取值越大,密文变动规律越大,密文变化 = 16 的 $ckey_length 次方
// 当此值为 0 时,则不产生随机密钥
$key = md5($key);
$keya = md5(substr($key, 0, 16));
$keyb = md5(substr($key, 16, 16));
$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : ''; $cryptkey = $keya.md5($keya.$keyc);
$key_length = strlen($cryptkey); $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;
$string_length = strlen($string); $result = '';
$box = range(0, 255); $rndkey = array();
for($i = 0; $i <= 255; $i++)
{
$rndkey[$i] = ord($cryptkey[$i % $key_length]);
} for($j = $i = 0; $i < 256; $i++)
{
$j = ($j + $box[$i] + $rndkey[$i]) % 256;
$tmp = $box[$i];
$box[$i] = $box[$j];
$box[$j] = $tmp;
} for($a = $j = $i = 0; $i < $string_length; $i++)
{
$a = ($a + 1) % 256;
$j = ($j + $box[$a]) % 256;
$tmp = $box[$a];
$box[$a] = $box[$j];
$box[$j] = $tmp;
$result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
} if($operation == 'DECODE')
{
if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16))
{
return substr($result, 26);
}
else
{
return '';
}
}
else
{
return $keyc.str_replace('=', '', base64_encode($result));
}
}
?>

最新文章

  1. spring的路径通配符
  2. Sandbox 文件存放规则
  3. RHEL6.4 KVM 桥接上网的设置
  4. Windows 8 自带定时关机的4种实现方法
  5. CODEVS 2994 超级弹珠
  6. web.py入门
  7. stdcall、cdecl、fastcall、thiscall 、naked call的汇编详解
  8. webpack 中版本兼容性问题错误总结
  9. pytest十六:allure2 生成 html 报告
  10. kivy 滑动
  11. java浅析final关键字
  12. SpringMVC框架05——拦截器
  13. 在ASP.NET MVC中使用Knockout实践05,基本验证
  14. LG1600 天天爱跑步
  15. mybatis遍历array数组与集合、json
  16. github怎么绑定自己的域名
  17. Java包装类、拆箱和装箱详解
  18. JQuery对RadioButton和CheckButton的操作
  19. 12 Essential Bootstrap Tools for Web Designers
  20. 使用原生js将轮播图组件化

热门文章

  1. ASP.NET Core 实战:将 .NET Core 2.0 项目升级到 .NET Core 2.1
  2. 网络学习笔记(二):TCP可靠传输原理
  3. Asp.NetCore轻松学-业务重点-实现一个简单的手机号码验证
  4. [转]Windows10中Virtualbox没办法选择和安装64位的Linux系统
  5. C#的一些获取时间的例子
  6. shiro缓存管理
  7. centOS7下Spark安装配置
  8. 微信小程序 canvas 文字自动换行
  9. HashTable、ConcurrentHashMap、TreeMap、HashMap关于键值的区别
  10. Java thrift服务器和客户端创建实例