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 静态化实现代码
Mar 20 PHP
使用PHP 5.0创建图形的巧妙方法
Oct 12 PHP
让PHP更快的提供文件下载的代码
Jun 13 PHP
php全角字符转换为半角函数
Feb 07 PHP
PHP学习笔记(二) 了解PHP的基本语法以及目录结构
Aug 04 PHP
php将数组存储为文本文件方法汇总
Oct 28 PHP
深入解析PHP的Laravel框架中的event事件操作
Mar 21 PHP
php通过会话控制实现身份验证实例
Oct 18 PHP
通过修改Laravel Auth使用salt和password进行认证用户详解
Aug 17 PHP
Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
Oct 11 PHP
PHP实现非阻塞模式的方法分析
Jul 26 PHP
PHP命名空间用法实例分析
Sep 04 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
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
js 对象是否存在判断
2009/07/15 Javascript
理解JavaScript的prototype属性
2012/02/11 Javascript
JavaScript中的关键字&quot;VAR&quot;使用详解 分享
2013/07/31 Javascript
javascript 上下banner替换具体实现
2013/11/14 Javascript
JS调用页面表格导出excel示例代码
2014/03/18 Javascript
js实现的Easy Tabs选项卡用法实例
2015/09/06 Javascript
AngularJS实现Model缓存的方式
2016/02/03 Javascript
Ajax和Comet技术总结
2017/02/19 Javascript
微信小程序实现tab切换效果
2017/11/21 Javascript
vue webpack打包优化操作技巧
2018/02/22 Javascript
Vue-drag-resize 拖拽缩放插件的使用(简单示例)
2019/12/04 Javascript
JS异步宏队列微队列原理详解
2020/09/09 Javascript
python中mechanize库的简单使用示例
2014/01/10 Python
零基础写python爬虫之打包生成exe文件
2014/11/06 Python
python模仿网页版微信发送消息功能
2018/02/24 Python
[原创]Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】
2018/10/29 Python
python中ImageTk.PhotoImage()不显示图片却不报错问题解决
2018/12/06 Python
利用python实现对web服务器的目录探测的方法
2019/02/26 Python
通过selenium抓取某东的TT购买记录并分析趋势过程解析
2019/08/15 Python
Django Session和Cookie分别实现记住用户登录状态操作
2020/07/02 Python
HTML5 embed 标签使用方法介绍
2013/08/13 HTML / CSS
Shopee印度尼西亚:东南亚与台湾市场最大电商平台
2018/06/17 全球购物
质量工程师岗位职责
2013/11/16 职场文书
大型车展策划方案
2014/02/01 职场文书
数控技术专业毕业自荐书范文
2014/02/05 职场文书
师恩难忘教学反思
2014/04/27 职场文书
摄影专业毕业生求职信
2014/08/05 职场文书
幼儿园小班教师个人工作总结
2015/02/06 职场文书
党员评议自我评价
2015/03/03 职场文书
2015年十一国庆节演讲稿
2015/03/20 职场文书
2015年管理人员工作总结
2015/05/13 职场文书
庆元旦主持词
2015/07/06 职场文书
创业计划书之书店
2019/09/10 职场文书
使用Python的开发框架Brownie部署以太坊智能合约
2021/05/28 Python
nginx lua 操作 mysql
2022/05/15 Servers