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 相关文章推荐
第十二节 类的自动加载 [12]
Oct 09 PHP
MySQL授权问题总结
May 06 PHP
php 常用类汇总 推荐收藏
May 13 PHP
php HtmlReplace输入过滤安全函数
Jul 03 PHP
深入解析PHP 5.3.x 的strtotime() 时区设定 警告信息修复
Aug 05 PHP
PHP文件读写操作相关函数总结
Nov 18 PHP
php下Memcached入门实例解析
Jan 05 PHP
百度工程师讲PHP函数的实现原理及性能分析(一)
May 13 PHP
PHP实现上传文件并存进数据库的方法
Jul 16 PHP
php 利用socket发送HTTP请求(GET,POST)
Aug 24 PHP
PHP上传文件及图片到七牛的方法
Jul 25 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
Sep 17 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
检查url链接是否已经有参数的php代码 添加 ? 或 &amp;
2010/02/09 PHP
PHP使用pcntl_fork实现多进程下载图片的方法
2014/12/16 PHP
php计算整个目录大小的方法
2015/06/01 PHP
yii2.0整合阿里云oss删除单个文件的方法
2017/09/19 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
一个基于jquery的图片切换效果
2010/07/06 Javascript
javascript中创建对象的三种常用方法
2010/12/30 Javascript
Eval and new funciton not the same thing
2012/12/27 Javascript
JS 各种网页尺寸判断实例方法
2013/04/18 Javascript
jquery 层次选择器siblings与nextAll的区别介绍
2013/08/02 Javascript
Javascript call和apply区别及使用方法
2013/11/14 Javascript
用js格式化金额可设置保留的小数位数
2014/05/09 Javascript
分享20款美化网站的 jQuery Lightbox 灯箱插件
2014/10/10 Javascript
JS中处理时间之setUTCMinutes()方法的使用
2015/06/12 Javascript
js电话号码验证方法
2015/09/28 Javascript
Angular中$compile源码分析
2016/01/28 Javascript
Javascrip实现文字跳动特效
2016/11/27 Javascript
微信小程序 合法域名校验出错详解及解决办法
2017/03/09 Javascript
JS实现简单的浮动碰撞效果示例
2017/12/28 Javascript
浅谈vue首屏加载优化
2018/06/28 Javascript
Vue.js的复用组件开发流程完整记录
2018/11/29 Javascript
如何让Nodejs支持H5 History模式(connect-history-api-fallback源码分析)
2019/05/30 NodeJs
Vue编程式跳转的实例代码详解
2019/07/10 Javascript
python实现保存网页到本地示例
2014/03/16 Python
python+pandas生成指定日期和重采样的方法
2018/04/11 Python
Python 实现Windows开机运行某软件的方法
2018/10/14 Python
python实现人工智能Ai抠图功能
2019/09/05 Python
浅谈Python线程的同步互斥与死锁
2020/03/22 Python
15个Pythonic的代码示例(值得收藏)
2020/10/29 Python
浅析HTML5:'data-'属性的作用
2018/01/23 HTML / CSS
英国旅行箱包和行李箱购物网站:Travel Luggage & Cabin Bags
2019/08/26 全球购物
工艺工程师岗位职责
2014/03/04 职场文书
《高尔基和他的儿子》教学反思
2014/04/09 职场文书
幼儿园家长反馈意见
2015/06/03 职场文书
朋友离别感言
2015/08/04 职场文书
Python函数式编程中itertools模块详解
2021/09/15 Python