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入门基础之php代码写法
Dec 30 PHP
解析PHP自带的进位制之间的转换函数
Jun 08 PHP
利用中国天气预报接口实现简单天气预报
Jan 20 PHP
php求两个目录的相对路径示例(php获取相对路径)
Mar 27 PHP
php进行支付宝开发中return_url和notify_url的区别分析
Dec 22 PHP
谈谈 PHP7新增功能
Dec 16 PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
Mar 22 PHP
Yii2实现增删改查后留在当前页的方法详解
Jan 13 PHP
Yii2下点击验证码的切换实例代码
Mar 14 PHP
PHP中file_put_contents追加和换行的实现方法
Apr 01 PHP
tp5(thinkPHP5框架)使用DB实现批量删除功能示例
May 28 PHP
PHP单元测试配置与使用方法详解
Dec 27 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
改造一台复古桌面收音机
2021/03/02 无线电
第1次亲密接触PHP5(2)
2006/10/09 PHP
PHP 文件上传进度条的两种实现方法的代码
2007/11/25 PHP
PHP编程最快明白(第一讲 软件环境和准备工作)
2010/10/25 PHP
php适配器模式介绍
2012/08/14 PHP
Zend studio文件注释模板设置方法
2013/09/29 PHP
php实现信用卡校验位算法THE LUHN MOD-10示例
2014/05/07 PHP
Smarty简单生成表单元素的方法示例
2016/05/23 PHP
php 运算符与表达式详细介绍
2016/11/30 PHP
js将json格式内容转换成对象的方法
2013/11/01 Javascript
JS打开新窗口防止被浏览器阻止的方法
2015/01/03 Javascript
jQuery实现为图片添加镜头放大效果的方法
2015/06/25 Javascript
Jquery实现仿京东商城省市联动菜单
2015/11/19 Javascript
Jquery中巧用Ajax的beforeSend方法
2016/01/20 Javascript
AngularJS 整理一些优化的小技巧
2016/08/18 Javascript
json数据处理及数据绑定
2017/01/25 Javascript
JavaScript截屏功能的实现代码
2017/07/28 Javascript
angularjs实现的购物金额计算工具示例
2018/05/08 Javascript
js+cavans实现图片滑块验证
2020/09/29 Javascript
layui使用及简单的三级联动实现教程
2020/12/01 Javascript
[01:05:56]Liquid vs VP Supermajor决赛 BO 第二场 6.10
2018/07/04 DOTA
python爬取指定微信公众号文章
2018/12/20 Python
python使用suds调用webservice接口的方法
2019/01/03 Python
Python玩转PDF的各种骚操作
2019/05/06 Python
tensorflow没有output结点,存储成pb文件的例子
2020/01/04 Python
Django认证系统user对象实现过程解析
2020/03/02 Python
使用pth文件添加Python环境变量方式
2020/05/26 Python
Pyecharts 中Geo函数常用参数的用法说明
2021/02/01 Python
你不知道的葡萄干处理法、橙蜜处理法、二氧化碳酵母法
2021/03/17 冲泡冲煮
皮尔·卡丹巴西官方商店:Pierre Cardin
2017/07/21 全球购物
什么是.net
2015/08/03 面试题
会展策划与管理专业大学生职业生涯规划
2014/02/07 职场文书
小学教师暑期培训方案
2014/08/28 职场文书
2014年“四风”问题个人整改措施
2014/09/17 职场文书
2015年小学生新年寄语
2014/12/08 职场文书
车间质检员岗位职责
2015/04/08 职场文书