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 相关文章推荐
用PHP实现图象锐化代码
Jun 14 PHP
PHP 常用函数库和一些实用小技巧
Jan 01 PHP
深入apache host的配置详解
Jun 09 PHP
探讨php中防止SQL注入最好的方法是什么
Jun 10 PHP
PHP下的Oracle客户端扩展(OCI8)安装教程
Sep 10 PHP
WordPress中is_singular()函数简介
Feb 05 PHP
为百度UE编辑器上传图片添加水印功能
Apr 16 PHP
PHP合并discuz用户脚本的方法
Aug 04 PHP
PHP安全下载文件的方法
Apr 07 PHP
PHP内存缓存功能memcached示例
Oct 19 PHP
[原创]PHP正则删除html代码中a标签并保留标签内容的方法
May 23 PHP
Yii2框架可逆加密简单实现方法
Aug 25 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
玩转图像函数库―常见图形操作
2006/09/03 PHP
php中http_build_query 的一个问题
2012/03/25 PHP
解析PHP中VC6 X86和VC9 X86的区别及 Non Thread Safe的意思
2013/06/28 PHP
php实现网站留言板功能
2015/11/04 PHP
php strftime函数获取日期时间(switch用法)
2018/05/16 PHP
thinkPHP3.2.3结合Laypage实现的分页功能示例
2018/05/28 PHP
juqery 学习之四 筛选过滤
2010/11/30 Javascript
JS中引用百度地图并将百度地图的logo和信息去掉
2013/09/29 Javascript
用Js实现的动态增加表格示例自己写的
2013/10/21 Javascript
js动态修改整个页面样式达到换肤效果
2014/05/23 Javascript
完美兼容IE,chrome,ff的设为首页、加入收藏及保存到桌面js代码
2014/12/17 Javascript
jQuery实现“扫码阅读”功能
2015/01/21 Javascript
jQuery实现指定内容滚动同时左侧或其它地方不滚动的方法
2015/08/08 Javascript
JavaScript数据结构与算法之栈与队列
2016/01/29 Javascript
jQuery.uploadify文件上传组件实例讲解
2016/09/23 Javascript
Vue监听数据对象变化源码
2017/03/09 Javascript
Bootstrap面板(Panels)的简单实现代码
2017/03/17 Javascript
jquery ui sortable拖拽后保存位置
2017/04/27 jQuery
关于 angularJS的一些用法
2017/11/29 Javascript
深入浅析Vue.js计算属性和侦听器
2018/05/05 Javascript
JavaScript HTML DOM元素 节点操作汇总
2019/07/29 Javascript
从零学Python之hello world
2014/05/21 Python
Python多继承原理与用法示例
2018/08/23 Python
基于Django ORM、一对一、一对多、多对多的全面讲解
2019/07/26 Python
浅谈Django前端后端值传递问题
2020/07/15 Python
学python爬虫能做什么
2020/07/29 Python
django创建css文件夹的具体方法
2020/07/31 Python
Selenium alert 弹窗处理的示例代码
2020/08/06 Python
Numpy数组的广播机制的实现
2020/11/03 Python
香港太阳眼镜网上商店:SmartBuyGlasses香港
2016/07/22 全球购物
应届生英语教师求职信
2013/11/05 职场文书
幼教毕业生自我鉴定
2014/01/12 职场文书
初中家长寄语
2014/04/02 职场文书
给学校建议书范文
2014/05/13 职场文书
四风问题个人自查剖析材料思想汇报
2014/09/21 职场文书
铣工实训报告
2014/11/05 职场文书