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 mysql 事务处理回滚操作(附实例)
Aug 05 PHP
对于ThinkPHP框架早期版本的一个SQL注入漏洞详细分析
Jul 04 PHP
THINKPHP项目开发中的日志记录实例分析
Dec 01 PHP
php实现SAE上使用storage上传与下载文件的方法
Jun 29 PHP
php根据日期显示所在星座的方法
Jul 13 PHP
PHP操作FTP类 (上传、下载、移动、创建等)
Mar 31 PHP
PHP jpgraph库的配置及生成统计图表:折线图、柱状图、饼状图
May 15 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
Jul 26 PHP
Laravel中错误与异常处理的用法示例
Sep 16 PHP
PHP实现的数据对象映射模式详解
Mar 20 PHP
tp5(thinkPHP5框架)captcha验证码配置及验证操作示例
May 28 PHP
php自定义排序uasort函数示例【二维数组按指定键值排序】
Jun 19 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
用js进行url编码后用php反解以及用php实现js的escape功能函数总结
2010/02/08 PHP
PHP-redis中文文档介绍
2013/02/07 PHP
神奇的代码 通杀各种网站-可随意修改复制页面内容
2008/07/17 Javascript
超级有用的13个基于jQuery的内容滚动插件和教程
2011/07/31 Javascript
分享33个jQuery与CSS3实现的绚丽鼠标悬停效果
2014/12/15 Javascript
JavaScript使用DeviceOne开发实战(二) 生成调试安装包
2015/12/01 Javascript
jQuery animate和CSS3相结合实现缓动追逐效果附源码下载
2016/04/18 Javascript
ECMAScript6 新特性范例大全
2017/03/24 Javascript
webpack实现热更新(实施同步刷新)
2017/07/28 Javascript
npm 更改默认全局路径以及国内镜像的方法
2018/05/16 Javascript
JavaScript高阶教程之“==”隐藏下的类型转换
2019/04/11 Javascript
vue实现随机验证码功能(完整代码)
2019/12/10 Javascript
Vue学习之组件用法实例详解
2020/01/06 Javascript
python字符串排序方法
2014/08/29 Python
Python发送email的3种方法
2015/04/28 Python
Linux 下 Python 实现按任意键退出的实现方法
2016/09/25 Python
python3+PyQt5实现使用剪贴板做复制与粘帖示例
2017/01/24 Python
Python 编码Basic Auth使用方法简单实例
2017/05/25 Python
python @property的用法及含义全面解析
2018/02/01 Python
python求解数组中两个字符串的最小距离
2018/09/27 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
2019/02/12 Python
python 类的继承 实例方法.静态方法.类方法的代码解析
2019/08/23 Python
Python坐标轴操作及设置代码实例
2020/06/04 Python
python 多线程死锁问题的解决方案
2020/08/25 Python
python实现无边框进度条的实例代码
2020/12/30 Python
美国按摩椅批发网站:Titan Chair
2018/12/27 全球购物
运行时异常与一般异常有何异同?
2014/01/05 面试题
高分子材料与工程专业推荐信
2013/12/01 职场文书
精通CAD能手自荐书
2014/01/31 职场文书
优秀士兵先进事迹
2014/02/06 职场文书
镇创先争优活动总结
2014/08/28 职场文书
民事上诉状范文
2015/05/22 职场文书
新教师教学工作总结
2015/08/12 职场文书
《中彩那天》教学反思
2016/02/24 职场文书
Python数据分析入门之教你怎么搭建环境
2021/05/13 Python
GoFrame基于性能测试得知grpool使用场景
2022/06/21 Golang