PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)


Posted in PHP onApril 28, 2010

这样我们就可以拿此函数来做很多用途了,比如:单点登录的token加密传输啦,临时密码啦等等

/** 
* @param string $string 原文或者密文 
* @param string $operation 操作(ENCODE | DECODE), 默认为 DECODE 
* @param string $key 密钥 
* @param int $expiry 密文有效期, 加密时候有效, 单位 秒,0 为永久有效 
* @return string 处理后的 原文或者 经过 base64_encode 处理后的密文 
* 
* @example 
* 
* $a = authcode('abc', 'ENCODE', 'key'); 
* $b = authcode($a, 'DECODE', 'key'); // $b(abc) 
* 
* $a = authcode('abc', 'ENCODE', 'key', 3600); 
* $b = authcode('abc', 'DECODE', 'key'); // 在一个小时内,$b(abc),否则 $b 为空 
*/ 
function authcode($string, $operation = 'DECODE', $key = '', $expiry = 3600) { 
$ckey_length = 4; 
// 随机密钥长度 取值 0-32; 
// 加入随机密钥,可以令密文无任何规律,即便是原文和密钥完全相同,加密结果也会每次不同,增大破解难度。 
// 取值越大,密文变动规律越大,密文变化 = 16 的 $ckey_length 次方 
// 当此值为 0 时,则不产生随机密钥 
$key = md5($key ? $key : EABAX::getAppInf('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)); 
} 
}
PHP 相关文章推荐
DEDE采集大师官方留后门的删除办法
Jan 08 PHP
采用header定义为文件然后readfile下载(隐藏下载地址)
Jan 31 PHP
解析PHP强制转换类型及远程管理插件的安全隐患
Jun 30 PHP
如何把php5.3版本升级到php5.4或者php5.5
Jul 31 PHP
php+ajax无刷新上传图片实例代码
Nov 17 PHP
PC端微信扫码支付成功之后自动跳转php版代码
Jul 07 PHP
IOS 开发之NSDictionary转换成JSON字符串
Aug 14 PHP
PHP实现的堆排序算法详解
Aug 17 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
Nov 14 PHP
thinkphp5 migrate数据库迁移工具
Feb 20 PHP
PHP 中 var_export、print_r、var_dump 调试中的区别
Jun 19 PHP
safari下载文件自动加了html后缀问题
Nov 09 PHP
PHP中冒号、endif、endwhile、endfor使用介绍
Apr 28 #PHP
PHP 文件上传全攻略
Apr 28 #PHP
PHP GD 图像处理组件的常用函数总结
Apr 28 #PHP
PHP 开发环境配置(测试开发环境)
Apr 28 #PHP
PHP 开发环境配置(Zend Studio)
Apr 28 #PHP
PHP 开发环境配置(Zend Server安装)
Apr 28 #PHP
PHP开发环境配置(MySQL数据库安装图文教程)
Apr 28 #PHP
You might like
《神奇女侠:血脉》神力女超人大战犯罪公司
2020/04/09 欧美动漫
PHP 程序员也要学会使用“异常”
2009/06/16 PHP
php 获取select下拉列表框的值
2010/05/08 PHP
php通用防注入程序 推荐
2011/02/26 PHP
php中大括号作用介绍
2012/03/22 PHP
浅谈php中include文件变量作用域
2015/06/18 PHP
一个简单至极的PHP缓存类代码
2015/10/23 PHP
详谈PHP程序Laravel 5框架的优化技巧
2016/07/18 PHP
PHP XML和数组互相转换详解
2016/10/26 PHP
通过php动态传数据到highcharts
2017/04/05 PHP
PHP批量删除jQuery操作
2017/07/23 PHP
PHP实现用session来实现记录用户登陆信息
2018/10/15 PHP
PHP常见加密函数用法示例【crypt与md5】
2019/01/27 PHP
幻宇的层模拟窗口效果-提供演示和下载
2007/01/20 Javascript
jQuery $.data()方法使用注意细节
2012/12/31 Javascript
使用JavaScript修改浏览器URL地址栏的实现代码
2013/10/21 Javascript
JS实现图片产生波纹一样flash效果的方法
2015/02/27 Javascript
深入理解JQuery中的事件与动画
2016/05/18 Javascript
angularjs 源码解析之injector
2016/08/22 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
2016/10/10 Javascript
JS实现微信弹出搜索框 多条件查询功能
2016/12/13 Javascript
AngularJS的脏检查深入分析
2017/04/22 Javascript
vue在路由中验证token是否存在的简单实现
2019/11/11 Javascript
Vue快速实现通用表单验证的方法
2020/02/24 Javascript
Python中给List添加元素的4种方法分享
2014/11/28 Python
Python实现Youku视频批量下载功能
2017/03/14 Python
使用Selenium破解新浪微博的四宫格验证码
2018/10/19 Python
python开头的coding设置方法
2019/08/08 Python
Python 继承,重写,super()调用父类方法操作示例
2019/09/29 Python
Python用5行代码实现批量抠图的示例代码
2020/04/14 Python
eDreams加拿大:廉价航班、酒店和度假
2019/03/29 全球购物
评析教师个人的自我评价
2014/02/19 职场文书
学校门卫岗位职责
2014/03/16 职场文书
杭州黄龙洞导游词
2015/02/10 职场文书
老公婚前保证书
2015/02/28 职场文书
关于感恩的作文
2019/08/26 职场文书