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格式化工具Beautify PHP小小BUG
Apr 24 PHP
开源SNS系统-ThinkSNS
May 18 PHP
php 读取shell管道传输过来的内容
Mar 01 PHP
PHP计划任务、定时执行任务的实现代码
Apr 23 PHP
Thinkphp搜索时首页分页和搜索页保持条件分页的方法
Dec 05 PHP
PHP5.2下preg_replace函数的问题
May 08 PHP
PHP编写RESTful接口
Feb 23 PHP
PHP实现的AES双向加密解密功能示例【128位】
Sep 03 PHP
PHP实现唤起微信支付功能
Feb 18 PHP
PHP生成短网址的思路以及实现方法的详解
Mar 25 PHP
Laravel框架查询构造器 CURD操作示例
Sep 04 PHP
php多进程中的阻塞与非阻塞操作实例分析
Mar 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可逆加密解密算法实例代码
2014/01/21 PHP
php类声明和php类使用方法示例分享
2014/03/29 PHP
PHP mkdir()无写权限的问题解决方法
2014/06/19 PHP
PHP多个文件上传到服务器实例
2014/10/29 PHP
smarty模板引擎从配置文件中获取数据的方法
2015/01/22 PHP
PHP中addslashes()和stripslashes()实现字符串转义和还原用法实例
2016/01/07 PHP
如何批量清理系统临时文件(语言:C#、 C/C++、 php 、python 、java )
2016/02/01 PHP
PHP常用技巧汇总
2016/03/04 PHP
如何离线执行php任务
2017/02/21 PHP
php实现的双色球算法示例
2017/06/20 PHP
sina的lightbox效果。
2007/01/09 Javascript
jquery遍历checkbox介绍
2014/02/21 Javascript
JavaScript中window.open用法实例详解
2015/04/15 Javascript
jquery验证邮箱格式是否正确实例讲解
2015/11/16 Javascript
jQuery扩展_动力节点Java学院整理
2017/07/05 jQuery
微信小程序template模版的使用方法
2019/04/13 Javascript
vue组件之间的数据传递方法详解
2019/04/19 Javascript
Python魔术方法详解
2015/02/14 Python
python在windows和linux下获得本机本地ip地址方法小结
2015/03/20 Python
详解python里使用正则表达式的全匹配功能
2017/10/19 Python
Python操作MongoDB数据库的方法示例
2018/01/04 Python
jupyter notebook引用from pyecharts.charts import Bar运行报错
2020/04/23 Python
python多线程之事件Event的使用详解
2018/04/27 Python
Python将一个CSV文件里的数据追加到另一个CSV文件的方法
2018/07/04 Python
浅谈python之新式类
2018/08/12 Python
python判断完全平方数的方法
2018/11/13 Python
Atom Python 配置Python3 解释器的方法
2019/08/28 Python
Python新手学习标准库模块命名
2020/05/29 Python
巧用CSS3的calc()宽度计算做响应模式布局的方法
2018/03/22 HTML / CSS
采用冷却技术的超自然舒适度:GhostBed床垫
2018/09/18 全球购物
LivingSocial英国:英国本地优惠
2019/02/22 全球购物
怎样有效的进行自我评价
2013/10/06 职场文书
《春天来了》教学反思
2014/04/07 职场文书
2015年学校保卫部工作总结
2015/05/11 职场文书
Python排序算法之插入排序及其优化方案详解
2021/06/11 Python
uniapp开发打包多端应用完整方法指南
2022/12/24 Javascript