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产生随机字符串函数
Dec 06 PHP
在服务端进行目录建立、删除,文件上传、删除的过程的php代码
Sep 10 PHP
PHP 数据库树的遍历方法
Feb 06 PHP
PHP5与MySQL数据库操作常用代码 收集
Mar 21 PHP
PHP实现时间轴函数代码
Oct 08 PHP
PHP判断网络文件是否存在的方法
Mar 12 PHP
php去除二维数组的重复项方法
Nov 03 PHP
PHP生成图片缩略图类示例
Jan 12 PHP
浅谈PHP面向对象之访问者模式+组合模式
May 22 PHP
PHP单例模式与工厂模式详解
Aug 29 PHP
自写的利用PDO对mysql数据库增删改查操作类
Feb 19 PHP
php7中停止php-fpm服务的方法详解
May 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
并发下常见的加锁及锁的PHP具体实现代码
2010/10/12 PHP
提高define性能的php扩展hidef的安装和使用
2011/06/14 PHP
php中过滤非法字符的具体实现
2013/10/29 PHP
分享下页面关键字抓取components.arrow.com站点代码
2014/01/30 PHP
ThinkPHP之N方法实例详解
2014/06/20 PHP
yii分页组件用法实例分析
2015/12/28 PHP
PHP静态成员变量和非静态成员变量详解
2017/02/14 PHP
PHP bin2hex()函数基础实例讲解
2019/02/11 PHP
使用UglifyJS合并/压缩JavaScript的方法
2012/03/07 Javascript
有关于JS辅助函数inherit()的问题
2013/04/07 Javascript
jquery实现加载等待效果示例
2013/09/25 Javascript
jquery的map与get方法详解
2013/11/04 Javascript
js制作网站首页图片轮播特效代码
2016/08/30 Javascript
jquery利用json实现页面之间传值的实例解析
2016/12/12 Javascript
vue jsx 使用指南及vue.js 使用jsx语法的方法
2017/11/11 Javascript
Webpack path与publicPath的区别详解
2018/05/03 Javascript
解决angular2 获取到的数据无法实时更新的问题
2018/08/31 Javascript
关于自定义Egg.js的请求级别日志详解
2018/12/12 Javascript
Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
2019/04/26 Javascript
微信小程序开发摇一摇功能
2019/11/22 Javascript
如何使用Javascript中的this关键字
2020/05/28 Javascript
javascript实现时间日期的格式化的方法汇总
2020/08/06 Javascript
[02:20]DOTA2中文配音宣传片
2013/05/22 DOTA
Django中实现点击图片链接强制直接下载的方法
2015/05/14 Python
浅谈pandas中shift和diff函数关系
2018/04/08 Python
Python实现查找字符串数组最长公共前缀示例
2019/03/27 Python
Python Web框架之Django框架Model基础详解
2019/08/16 Python
Python 使用指定的网卡发送HTTP请求的实例
2019/08/21 Python
解决redis与Python交互取出来的是bytes类型的问题
2020/07/16 Python
加拿大花店:1800Flowers.ca
2016/11/16 全球购物
学校安全责任书
2014/04/14 职场文书
基层党员四风问题自我剖析材料
2014/09/29 职场文书
2014年教师德育工作总结
2014/11/10 职场文书
先进集体申报材料
2014/12/25 职场文书
2016年中学法制宣传日活动总结
2016/04/01 职场文书
CSS3 天气图标动画效果
2021/04/06 HTML / CSS