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 相关文章推荐
基于mysql的bbs设计(二)
Oct 09 PHP
PHP中,文件上传
Dec 06 PHP
解析php addslashes()与addclashes()函数的区别和比较
Jun 24 PHP
thinkphp浏览历史功能实现方法
Oct 29 PHP
php实现递归抓取网页类实例
Apr 03 PHP
分享php分页的功能模块
Jun 16 PHP
php提交过来的数据生成为txt文件
Apr 28 PHP
Yii使用DeleteAll连表删除出现报错问题的解决方法
Jul 14 PHP
弹出模态框modal的实现方法及实例
Sep 19 PHP
PHP空值检测函数与方法汇总
Nov 19 PHP
thinkphp5框架路由原理与用法详解
Feb 11 PHP
Thinkphp5+Redis实现商品秒杀代码实例讲解
Dec 29 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函数 serialize()和unserialize()
2012/02/04 PHP
php调用dll的实例操作动画与代码分享
2012/08/14 PHP
PHP按一定比例压缩图片的方法
2018/10/12 PHP
JS对URL字符串进行编码/解码分析
2008/10/25 Javascript
JavaScript this 深入理解
2009/07/30 Javascript
js网页侧边随页面滚动广告效果实现
2011/04/14 Javascript
jquery each的几种常用的使用方法示例
2014/01/21 Javascript
JavaScript作用域链示例分享
2014/05/27 Javascript
jQuery常用数据处理方法小结
2015/02/20 Javascript
jQuery验证元素是否为空的两种常用方法
2015/03/17 Javascript
基于JavaScript实现鼠标悬浮弹出跟随鼠标移动的带箭头的信息层
2016/01/18 Javascript
JavaScript预解析及相关技巧分析
2016/04/21 Javascript
微信小程序 倒计时组件实现代码
2016/10/24 Javascript
jQuery Validate设置onkeyup验证的实例代码
2016/12/09 Javascript
jQuery实现6位数字密码输入框
2016/12/29 Javascript
jQuery Password Validation密码验证
2016/12/30 Javascript
使用grunt合并压缩js和css文件的方法
2017/03/02 Javascript
详解使用Visual Studio Code对Node.js进行断点调试
2017/09/14 Javascript
使用vue实现通过变量动态拼接url
2020/07/22 Javascript
[01:03:42]VP vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python备份文件的脚本
2008/08/11 Python
python基于mysql实现的简单队列以及跨进程锁实例详解
2014/07/07 Python
Python PO设计模式的具体使用
2019/08/16 Python
社区版pycharm创建django项目的方法(pycharm的newproject左侧没有项目选项)
2020/09/23 Python
Django跨域请求原理及实现代码
2020/11/14 Python
python help函数实例用法
2020/12/06 Python
Html5 Canvas 实现一个“刮刮乐”游戏
2019/09/05 HTML / CSS
学习十八届三中全会精神实施方案
2014/02/17 职场文书
公益广告宣传方案
2014/02/28 职场文书
《长相思》听课反思
2014/04/10 职场文书
行政部经理助理岗位职责
2014/06/15 职场文书
2014年调度员工作总结
2014/11/19 职场文书
单位婚育证明范本
2014/11/21 职场文书
2015年街道办事处工作总结
2015/05/22 职场文书
社区服务活动感想
2015/08/11 职场文书
学校教师培训工作总结
2015/10/14 职场文书