UCenter中的一个可逆加密函数authcode函数代码


Posted in PHP onJuly 20, 2010
function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) { $ckey_length = 4; // 随机密钥长度 取值 0-32; 
// 加入随机密钥,可以令密文无任何规律,即便是原文和密钥完全相同,加密结果也会每次不同,增大破解难度。 
// 取值越大,密文变动规律越大,密文变化 = 16 的 $ckey_length 次方 
// 当此值为 0 时,则不产生随机密钥 
$key = md5($key ? $key : UC_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)); 
} 
} 
/***************************************************************************/ 
$string = authcode("Hello","ENCODE","HTML_TCCJ_AUTH"); 
echo $string,'<br/>'; 
echo authcode($string,"DECODE","HTML_TCCJ_AUTH"),'<br/>';
PHP 相关文章推荐
用PHP调用Oracle存储过程
Oct 09 PHP
php4的session功能评述(三)
Oct 09 PHP
MayFish PHP的MVC架构的开发框架
Aug 13 PHP
php使用exec shell命令注入的方法讲解
Nov 12 PHP
ubuntu12.04使用c编写php扩展模块教程分享
Dec 25 PHP
PHP经典面试题之设计模式(经常遇到)
Oct 15 PHP
PHP文件上传问题汇总(文件大小检测、大文件上传处理)
Dec 24 PHP
PHP使用trim函数去除字符串左右空格及特殊字符实例
Jan 07 PHP
详谈PHP程序Laravel 5框架的优化技巧
Jul 18 PHP
thinkPHP5.0框架开发规范简介
Mar 25 PHP
php 调用ffmpeg获取视频信息的简单实现
Apr 03 PHP
PHP实现正则匹配所有括号中的内容
Jun 22 PHP
PHP连接SQLServer2005 的问题解决方法
Jul 19 #PHP
在Windows系统上安装PHP运行环境文字教程
Jul 19 #PHP
ajax实现无刷新分页(php)
Jul 18 #PHP
php将会员数据导入到ucenter的代码
Jul 18 #PHP
php 无限级数据JSON格式及JS解析
Jul 17 #PHP
php下使用strpos需要注意 === 运算符
Jul 17 #PHP
按上下级层次关系输出内容的PHP代码
Jul 17 #PHP
You might like
简单的PHP留言本实例代码
2010/05/09 PHP
codeigniter集成ucenter1.6双向通信的解决办法
2014/06/12 PHP
javascript下有关dom以及xml节点访问兼容问题
2007/11/26 Javascript
点击进行复制的JS代码实例
2013/08/23 Javascript
replace()方法查找字符使用示例
2013/10/28 Javascript
Egret引擎开发指南之创建项目
2014/09/03 Javascript
node.js中的fs.appendFileSync方法使用说明
2014/12/17 Javascript
jquery实现鼠标拖拽滑动效果来选择数字的方法
2015/05/04 Javascript
基于jquery实现无限级树形菜单
2016/03/22 Javascript
Bootstrap Fileinput文件上传组件用法详解
2016/05/10 Javascript
JS正则表达式学习之贪婪和非贪婪模式实例总结
2016/12/26 Javascript
vue2.0结合Element实现select动态控制input禁用实例
2017/05/12 Javascript
用vue封装插件并发布到npm的方法步骤
2017/10/18 Javascript
深入浅出webpack之externals的使用
2017/12/04 Javascript
JS抛物线动画实例制作
2018/02/24 Javascript
Array数组对象中的forEach、map、filter及reduce详析
2018/08/02 Javascript
vue配置接口域名方法总结
2019/05/12 Javascript
JS实现滑动插件
2020/01/15 Javascript
Jquery cookie插件实现原理代码解析
2020/08/04 jQuery
nestjs返回给前端数据格式的封装实现
2021/02/22 Javascript
[47:22]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[02:55]含熏伴清风,风行者至宝、屠夫身心及典藏宝瓶二展示
2020/09/08 DOTA
python对url格式解析的方法
2015/05/13 Python
Python断言assert的用法代码解析
2018/02/03 Python
python OpenCV学习笔记直方图反向投影的实现
2018/02/07 Python
Python pip安装模块提示错误解决方案
2020/05/22 Python
使用Html5多媒体实现微信语音功能
2019/07/26 HTML / CSS
解决HTML5中的audio在手机端和微信端的不能自动播放问题
2019/11/04 HTML / CSS
摩托车和ATV零件、配件和服装的首选在线零售商:MotoSport
2017/12/22 全球购物
Pam & Gela官网:美国性感前卫女装品牌
2018/07/19 全球购物
个人培训自我鉴定
2014/03/28 职场文书
2014最新离职证明范本
2014/09/12 职场文书
婚庆答谢词
2015/01/04 职场文书
我们的节日重阳节活动总结
2015/03/24 职场文书
python中pandas.read_csv()函数的深入讲解
2021/03/29 Python
MySQL中InnoDB存储引擎的锁的基本使用教程
2021/05/26 MySQL