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 相关文章推荐
PR值查询 | PageRank 查询
Dec 20 PHP
php获取汉字首字母的函数
Nov 07 PHP
php中关于socket的系列函数总结
May 18 PHP
ThinkPHP函数详解之M方法和R方法
Sep 10 PHP
关于WordPress的SEO优化相关的一些PHP页面脚本技巧
Dec 10 PHP
理解PHP中的Session及对Session有效期的控制
Jan 08 PHP
php is_executable判断给定文件名是否可执行实例
Sep 26 PHP
Yii2框架实现数据库常用操作总结
Feb 08 PHP
PHP清除缓存的几种方法总结
Sep 12 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
Jun 16 PHP
tp5(thinkPHP5框架)captcha验证码配置及验证操作示例
May 28 PHP
php的无刷新操作实现方法分析
Feb 28 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实现模仿socket请求返回页面的方法
2014/11/04 PHP
php源码的使用方法讲解
2019/09/26 PHP
这段js代码得节约你多少时间
2011/12/20 Javascript
js实现的简洁网页滑动tab菜单效果代码
2015/08/24 Javascript
javascript实现图片延迟加载方法汇总(三种方法)
2015/08/27 Javascript
详解javascript中的事件处理
2015/11/06 Javascript
基于jQuery实现复选框是否选中进行答题提示
2015/12/10 Javascript
基于JavaScript的操作系统你听说过吗?
2016/01/28 Javascript
Jquery针对tr td的一些实用操作方法(必看篇)
2016/10/05 Javascript
浏览器事件循环与vue nextTicket的实现
2019/04/16 Javascript
[14:56]教你分分钟做大人:巫医
2014/10/30 DOTA
Sanic框架请求与响应实例分析
2018/07/16 Python
python list格式数据excel导出方法
2018/10/31 Python
python学习——内置函数、数据结构、标准库的技巧(推荐)
2019/04/18 Python
Python3.5内置模块之time与datetime模块用法实例分析
2019/04/27 Python
python2.7 安装pip的方法步骤(管用)
2019/05/05 Python
Django 路由控制的实现
2019/07/17 Python
Python高并发解决方案实现过程详解
2020/07/31 Python
matplotlib bar()实现多组数据并列柱状图通用简便创建方法
2021/02/24 Python
MVMT手表官方网站:时尚又实惠的高品质手表
2016/12/04 全球购物
预订全球最佳旅行体验:Viator
2018/03/30 全球购物
美国按摩椅批发网站:Titan Chair
2018/12/27 全球购物
计算s=f(f(-1.4))的值
2014/05/06 面试题
幼儿园园长自我鉴定
2013/10/22 职场文书
英语专业毕业生自荐信
2013/10/28 职场文书
一名女生的自荐信
2013/12/08 职场文书
安全生产责任书
2014/03/12 职场文书
2014购房个人委托书范本
2014/10/12 职场文书
村党的群众路线教育实践活动工作总结
2014/10/25 职场文书
个人年终总结结尾
2015/03/06 职场文书
导游词之西安大清真寺
2019/12/17 职场文书
sql中mod()函数取余数的用法
2021/05/29 SQL Server
opencv读取视频并保存图像的方法
2021/06/04 Python
MySQL 四种连接和多表查询详解
2021/07/16 MySQL
javascript对象3个属性特征
2021/11/17 Javascript
Python Pandas 删除列操作
2022/03/16 Python