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边学边教》(01.开篇――准备工作)
Dec 13 PHP
Function eregi is deprecated (解决方法)
Jun 21 PHP
对于PHP 5.4 你必须要知道的
Aug 07 PHP
PHP利用str_replace防注入的方法
Nov 10 PHP
ThinkPHP之R方法实例详解
Jun 20 PHP
PHP内置过滤器FILTER使用实例
Jun 25 PHP
php函数serialize()与unserialize()用法实例
Nov 06 PHP
php替换字符串中间字符为省略号的方法
May 04 PHP
详解php中 === 的使用
Oct 24 PHP
基于php(Thinkphp)+jquery 实现ajax多选反选不选删除数据功能
Feb 24 PHP
PHP实现向关联数组指定的Key之前插入元素的方法
Jun 06 PHP
TP5框架实现的数据库备份功能示例
Apr 05 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 和 HTML
2006/10/09 PHP
PHP 程序授权验证开发思路
2009/07/09 PHP
PHP开启gzip页面压缩实例代码
2010/03/11 PHP
PHP在网页中动态生成PDF文件详细教程
2014/07/05 PHP
PHP实现从远程下载文件的方法
2015/03/12 PHP
php使用CutyCapt实现网页截图保存的方法
2016/10/03 PHP
用JAVASCRIPT如何给&amp;lt;textarea&amp;gt;&amp;lt;/textarea&amp;gt;赋值
2007/04/20 Javascript
Extjs学习笔记之七 布局
2010/01/08 Javascript
JS面向对象编程之对象使用分析
2010/08/19 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
2012/03/07 Javascript
js中实现多态采用和继承类似的方法
2014/08/22 Javascript
JS点击链接后慢慢展开隐藏着图片的方法
2015/02/17 Javascript
Node.js插件安装图文教程
2016/05/06 Javascript
使用微信小程序开发前端【快速入门】
2016/12/05 Javascript
vue项目实现记住密码到cookie功能示例(附源码)
2018/01/31 Javascript
VueJS 取得 URL 参数值的方法
2019/07/19 Javascript
jQuery实现简易QQ聊天框
2020/02/10 jQuery
[01:56]2014DOTA2西雅图邀请赛 MVP外卡赛老队长精辟点评
2014/07/09 DOTA
解决python2.7用pip安装包时出现错误的问题
2017/01/23 Python
Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)
2017/06/27 Python
Flask框架实现给视图函数增加装饰器操作示例
2018/07/16 Python
Python函数中参数是传递值还是引用详解
2019/07/02 Python
python绘制无向图度分布曲线示例
2019/11/22 Python
python中random.randint和random.randrange的区别详解
2020/09/20 Python
Python利用Pillow(PIL)库实现验证码图片的全过程
2020/10/04 Python
Vs Code中8个好用的python 扩展插件
2020/10/12 Python
韩都衣舍天猫官方旗舰店:天猫女装销售总冠军
2017/10/10 全球购物
公司业务主管岗位职责
2013/12/07 职场文书
党支部班子“四风”问题自我剖析材料
2014/09/28 职场文书
2014年教育培训工作总结
2014/12/08 职场文书
2014年路政工作总结
2014/12/10 职场文书
酒店人事主管岗位职责
2015/04/11 职场文书
清明祭英烈活动总结
2015/05/11 职场文书
校园广播稿范文
2015/08/19 职场文书
合理化建议书范文
2015/09/14 职场文书
MySQL Innodb关键特性之插入缓冲(insert buffer)
2021/04/08 MySQL