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
php面向对象全攻略 (九)访问类型
Sep 30 PHP
php下将图片以二进制存入mysql数据库中并显示的实现代码
May 27 PHP
php中获取指定IP的物理地址的代码(正则表达式)
Jun 23 PHP
深入PHP中的HashTable结构详解
Jun 13 PHP
如何使用FireFox插件FirePHP调试PHP
Jul 23 PHP
PHP使用CURL模拟登录的方法
Jul 08 PHP
使用图灵api创建微信聊天机器人
Jul 23 PHP
PHP生成可点击刷新的验证码简单示例
May 13 PHP
mysql desc(DESCRIBE)命令实例讲解
Sep 24 PHP
几行代码轻松实现PHP文件打包下载zip
Mar 01 PHP
php适配器模式简单应用示例
Oct 23 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+jQuery 注册模块开发详解
2014/10/14 PHP
PHP响应post请求上传文件的方法
2015/12/17 PHP
php强大的时间转换函数strtotime
2016/02/18 PHP
Linux下编译redis和phpredis的方法
2016/04/07 PHP
PHP编写登录验证码功能 附调用方法
2016/05/19 PHP
getElementById在任意一款浏览器中都可以用吗的疑问回复
2007/05/13 Javascript
用jquery设置按钮的disabled属性的实现代码
2010/11/28 Javascript
JS 屏蔽键盘不可用与鼠标右键不可用的方法
2013/11/18 Javascript
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
2014/11/12 Javascript
使用javascript将时间转换成今天,昨天,前天等格式
2015/06/25 Javascript
理解AngularJs指令
2015/12/10 Javascript
详解Angular中$cacheFactory缓存的使用
2016/08/19 Javascript
canvas绘制的直线动画
2017/01/23 Javascript
浅谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/27 Javascript
JS仿淘宝搜索框用户输入事件的实现
2017/06/19 Javascript
ES6新增的math,Number方法
2017/08/06 Javascript
写给vue新手们的vue渲染页面教程
2017/09/01 Javascript
bootstrap table实现双击可编辑、添加、删除行功能
2017/09/27 Javascript
从零开始在NPM上发布一个Vue组件的方法步骤
2018/12/20 Javascript
浅谈Vue中render中的h箭头函数
2019/11/07 Javascript
微信小程序实现日历小功能
2020/11/18 Javascript
微信小程序实现可拖动悬浮图标(包括按钮角标的实现)
2020/12/29 Javascript
[00:05]ChinaJoy现场 DOTA2玩家高呼“CN DOTA BEST DOTA”
2019/08/04 DOTA
Python 流程控制实例代码
2009/09/25 Python
pandas DataFrame 根据多列的值做判断,生成新的列值实例
2018/05/18 Python
Python机器学习k-近邻算法(K Nearest Neighbor)实例详解
2018/06/25 Python
利用Python实现自动扫雷小脚本
2020/12/17 Python
CSS3 真的会替代 SCSS 吗
2021/03/09 HTML / CSS
写一个函数返回1+2+3+…+n的值(假定结果不会超过长整型变量的范围)
2014/09/05 面试题
办公室主任竞聘演讲稿
2014/05/15 职场文书
群众路线对照检查材料思想汇报怎么写
2014/09/18 职场文书
党员作风建设自查报告
2014/10/23 职场文书
大学四年个人总结
2015/03/03 职场文书
建筑工程催款函
2015/06/24 职场文书
小学教师教学随笔
2015/08/14 职场文书
微信小程序 WeUI扩展组件库的入门教程
2022/04/21 Javascript