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
目录,文件操作详谈―PHP
Nov 25 PHP
php 获取一个月第一天与最后一天的代码
May 16 PHP
PHP源码之explode使用说明
Aug 05 PHP
PHP数组 为文章加关键字连接 文章内容自动加链接
Dec 29 PHP
用PHP即时捕捉PHP中的错误并发送email通知的实现代码
Jan 19 PHP
Memcached常用命令以及使用说明详解
Jun 27 PHP
php使用mb_check_encoding检查字符串在指定的编码里是否有效
Nov 07 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
Jun 13 PHP
PHP中使用json数据格式定义字面量对象的方法
Aug 20 PHP
PHP链接MySQL的常用扩展函数
Oct 23 PHP
PHP cURL获取微信公众号access_token的实例
Apr 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
BBS(php &amp; mysql)完整版(三)
2006/10/09 PHP
让你的网站首页自动选择语言转跳
2006/12/06 PHP
phpcms模块开发之swfupload的使用介绍
2013/04/28 PHP
3款值得推荐的微信开发开源框架
2014/10/28 PHP
解决安装WampServer时提示缺少msvcr110.dll文件的问题
2017/07/09 PHP
YII2框架中actions的作用与使用方法示例
2020/03/13 PHP
漂亮的提示信息(带箭头)
2007/03/21 Javascript
JavaScript是否可实现多线程  深入理解JavaScript定时机制
2009/12/22 Javascript
一个简单的js渐显(fadeIn)渐隐(fadeOut)类
2010/06/19 Javascript
jquery绑定原理 简单解析与实现代码分享
2011/09/06 Javascript
jquery选择符快速提取web表单数据示例
2014/03/27 Javascript
js验证IP及子网掩码的合法性有效性示例
2014/04/30 Javascript
Java File类的常用方法总结
2015/03/18 Javascript
JQuery悬停控制图片轮播——代码简单
2015/08/05 Javascript
jQuery中常用的遍历函数用法实例总结
2015/09/01 Javascript
JavaScript实现简单获取当前网页网址的方法
2015/11/09 Javascript
Jq通过td获取同行其它列td的方法
2016/10/05 Javascript
微信小程序 教程之wxapp视图容器 scroll-view
2016/10/19 Javascript
jquery日历插件e-calendar升级版
2016/11/10 Javascript
微信小程序点击图片实现长按预览、保存、识别带参数二维码、转发等功能
2019/07/20 Javascript
vue+render+jsx实现可编辑动态多级表头table的实例代码
2020/04/01 Javascript
微信分享invalid signature签名错误踩过的坑
2020/04/11 Javascript
Jquery 获取相同NAME 或者id删除行操作
2020/08/24 jQuery
js实现简易点击切换显示或隐藏
2020/11/29 Javascript
Python的动态重新封装的教程
2015/04/11 Python
python使用flask与js进行前后台交互的例子
2019/07/19 Python
Python使用Pandas读写Excel实例解析
2019/11/19 Python
python双端队列原理、实现与使用方法分析
2019/11/27 Python
python实现在一个画布上画多个子图
2020/01/19 Python
python实现扫雷游戏的示例
2020/10/20 Python
详解python3类型注释annotations实用案例
2021/01/20 Python
你常见到的runtime exception
2016/09/05 面试题
武汉世纪畅想数字传播有限公司 .NET笔试题
2015/06/13 面试题
爱国主义教育基地观后感
2015/06/18 职场文书
selenium.webdriver中add_argument方法常用参数表
2021/04/08 Python
MySQL 存储过程的优缺点分析
2021/05/20 MySQL