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 相关文章推荐
搜索引擎技术核心揭密
Oct 09 PHP
配置支持SSI
Nov 25 PHP
PHP程序员编程注意事项
Apr 10 PHP
隐性调用php程序的方法
Mar 09 PHP
php计算十二星座的函数代码
Aug 21 PHP
php后台如何避免用户直接进入方法实例
Oct 15 PHP
php用户注册页面利用js进行表单验证具体实例
Oct 17 PHP
PHP读取txt文本文件并分页显示的方法
Mar 11 PHP
一个简单至极的PHP缓存类代码
Oct 23 PHP
PHP下SSL加密解密、验证、签名方法(很简单)
Jun 28 PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
Mar 27 PHP
laravel异步监控定时调度器实例详解
Jun 21 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+jQuery实现自动补全功能源码
2013/05/15 PHP
调整PHP的性能
2013/10/30 PHP
CodeIgniter中使用Smarty3基本配置
2015/06/29 PHP
PHP中把对象数组转换成普通数组的方法
2015/07/10 PHP
php封装db类连接sqlite3数据库的方法实例
2017/12/19 PHP
jquery animate图片模向滑动示例代码
2011/01/26 Javascript
javascript动态加载三
2012/08/22 Javascript
js动画效果制件让图片组成动画代码分享
2014/01/14 Javascript
JS常用字符串处理方法应用总结
2014/05/22 Javascript
extjs_02_grid显示本地数据、显示跨域数据
2014/06/23 Javascript
用console.table()调试javascript
2014/09/04 Javascript
分析了一下JQuery中的extend方法实现原理
2015/02/27 Javascript
javascript遍历json对象的key和任意js对象属性实例
2017/03/09 Javascript
利用NPM淘宝的node.js镜像加速nvm
2017/03/27 Javascript
JavaScript数据结构之广义表的定义与表示方法详解
2017/04/12 Javascript
史上最全JavaScript数组去重的十种方法(推荐)
2017/08/17 Javascript
浅谈关于.vue文件中style的scoped属性
2017/08/19 Javascript
js实现登录与注册界面
2017/11/01 Javascript
如何基于JavaScript判断图片是否加载完成
2019/12/28 Javascript
Node.js web 应用如何封装到Docker容器中
2020/09/01 Javascript
python中的hashlib和base64加密模块使用实例
2014/09/02 Python
python PIL模块与随机生成中文验证码
2016/02/27 Python
python中string模块各属性以及函数的用法介绍
2016/05/30 Python
python基础教程之匿名函数lambda
2017/01/17 Python
WINDOWS 同时安装 python2 python3 后 pip 错误的解决方法
2017/03/16 Python
解决安装python库时windows error5 报错的问题
2018/10/21 Python
Windows系统下pycharm中的pip换源
2020/02/23 Python
在DELPHI中调用存储过程和使用内嵌SQL哪种方式更好
2016/11/22 面试题
大型演出策划方案
2014/05/28 职场文书
群众路线批评与自我批评发言稿
2014/10/16 职场文书
雨花台导游词
2015/02/06 职场文书
计划生育工作总结2015
2015/04/03 职场文书
遗嘱格式范本
2015/08/07 职场文书
2016年第32个教师节红领巾广播稿
2015/12/18 职场文书
解决Laravel使用验证时跳转到首页的问题
2021/11/17 PHP
浅谈Redis的事件驱动模型
2022/05/30 Redis