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 相关文章推荐
php5.2时间相差8小时
Jan 15 PHP
PHP对象相互引用的内存溢出实例分析
Aug 28 PHP
php程序员应具有的7种能力小结
Nov 27 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
Jun 17 PHP
php实现通过cookie换肤的方法
Jul 13 PHP
PHP调用存储过程返回值不一致问题的解决方法分析
Apr 26 PHP
Nginx环境下PHP flush失效的解决方法
Oct 19 PHP
php使用curl代理实现抓取数据的方法
Feb 03 PHP
php实现批量上传数据到数据库(.csv格式)的案例
Jun 18 PHP
PHP实现的DES加密解密类定义与用法示例
Nov 02 PHP
PHP正则表达式函数preg_replace用法实例分析
Jun 04 PHP
PHP实现倒计时功能
Nov 16 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
我的论坛源代码(九)
2006/10/09 PHP
smarty+adodb+部分自定义类的php开发模式
2006/12/31 PHP
新手学PHP之数据库操作详解及乱码解决!
2007/01/02 PHP
php 函数使用方法与函数定义方法
2010/05/09 PHP
PHP中怎样防止SQL注入分析
2014/10/23 PHP
PHPStrom中实用的功能和快捷键大全
2015/09/23 PHP
php强大的时间转换函数strtotime
2016/02/18 PHP
PHP的自定义模板引擎
2017/03/24 PHP
Laravel5.5 动态切换多语言的操作方式
2019/10/25 PHP
用JavaScrpt实现文件夹简单轻松加密的实现方法图文
2008/09/08 Javascript
javascript面向对象编程(一) 实例代码
2010/06/25 Javascript
jQuery新闻滚动插件 jquery.roller.js
2011/06/27 Javascript
判断对象是否Window的实现代码
2012/01/10 Javascript
window.addEventListener来解决让一个js事件执行多个函数
2012/12/26 Javascript
js时间日期和毫秒的相互转换
2013/02/22 Javascript
js history对象简单实现返回和前进
2013/10/30 Javascript
jquery做的一个简单的屏幕锁定提示框
2014/03/26 Javascript
js实现按钮加背景图片常用方法
2014/11/01 Javascript
谈谈JavaScript中function多重理解
2015/08/28 Javascript
使用node+vue.js实现SPA应用
2016/01/28 Javascript
深入理解jquery中的事件与动画
2016/05/24 Javascript
Javascript实现数组中的元素上下移动
2017/04/28 Javascript
Angular2生命周期钩子函数的详细介绍
2017/07/10 Javascript
关于Django外键赋值问题详解
2017/08/13 Python
python中利用Future对象回调别的函数示例代码
2017/09/07 Python
python之信息加密题目详解
2019/06/26 Python
PHP统计代码行数的小代码
2019/09/19 Python
英国知名小木屋定制网站:Tiger Sheds
2020/03/06 全球购物
军训自我鉴定200字
2014/02/13 职场文书
毕业生自荐信格式
2014/03/07 职场文书
5s标语大全
2014/06/23 职场文书
2014年干部作风建设总结
2014/10/23 职场文书
事业单位年度考核评语
2014/12/31 职场文书
小学四年级作文之写景
2019/08/23 职场文书
在Java中Collection的一些常用方法总结
2021/06/13 Java/Android
css样式important规则的正确使用方式
2022/06/10 HTML / CSS