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 Session变量不能传送到下一页的解决方法
Nov 27 PHP
一些被忽视的PHP函数(简单整理)
Apr 30 PHP
让PHP支持断点续传的源码
May 16 PHP
php中定时计划任务的实现原理
Jan 08 PHP
PHP 观察者模式的实现代码
May 10 PHP
简单的php文件上传(实例)
Oct 27 PHP
php中\r \r\n \t的区别示例介绍
Feb 08 PHP
ThinkPHP查询中的魔术方法简述
Jun 25 PHP
PHP生成静态HTML页面最简单方法示例
Apr 09 PHP
再推荐十款免费的php开发工具
Nov 09 PHP
thinkphp中的url跳转用法分析
Jul 12 PHP
php处理多图上传压缩代码功能
Jun 13 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正则表达式中的非贪婪模式匹配的使用
2014/11/25 PHP
php使用数组填充下拉列表框的方法
2015/03/31 PHP
php+ajax 实现输入读取数据库显示匹配信息
2015/10/08 PHP
PHP中in_array函数使用的问题与解决办法
2016/09/11 PHP
PHP使用new StdClass()创建空对象的方法分析
2017/06/06 PHP
tp5(thinkPHP5)操作mongoDB数据库的方法
2018/01/20 PHP
Yii框架引入coreseek分页功能示例
2019/02/08 PHP
用JS实现的一个include函数
2007/07/21 Javascript
javascript json 新手入门文档
2009/12/03 Javascript
jQuery Deferred和Promise创建响应式应用程序详细介绍
2013/03/05 Javascript
jQuery中get()方法用法实例
2014/12/27 Javascript
jQuery和AngularJS的区别浅析
2015/01/29 Javascript
js实现仿百度汽车频道选择汽车图片展示实例
2015/05/06 Javascript
JS实现点击上移下移LI行数据的方法
2015/08/05 Javascript
jquery hover 不停闪动问题的解决方法(亦为stop()的使用)
2017/02/10 Javascript
Vue.js实现简单动态数据处理
2017/02/13 Javascript
微信小程序用户位置权限的获取方法(拒绝后提醒)
2018/11/15 Javascript
element-ui table span-method(行合并)的实现代码
2018/12/20 Javascript
Vue 动态添加路由及生成菜单的方法示例
2019/06/20 Javascript
layui form.render('select', 'test2') 更新渲染的方法
2019/09/27 Javascript
[39:11]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第二局
2016/02/28 DOTA
使用python实现拉钩网上的FizzBuzzWhizz问题示例
2014/05/05 Python
一个可以套路别人的python小程序实例代码
2019/04/09 Python
详解Python中的内建函数,可迭代对象,迭代器
2019/04/29 Python
python操作文件的参数整理
2019/06/11 Python
程序员的七夕用30行代码让Python化身表白神器
2019/08/07 Python
对Keras中predict()方法和predict_classes()方法的区别说明
2020/06/09 Python
MATCHESFASHION.COM法国官网:英国奢侈品零售商
2018/01/04 全球购物
大都会艺术博物馆商店:The Met Store
2018/06/22 全球购物
巴西独家产品和现场演示购物网站:Shoptime
2019/07/11 全球购物
旅游饭店管理专业自荐书
2014/06/28 职场文书
推普周国旗下讲话稿
2014/09/21 职场文书
教师批评与自我批评心得体会
2014/10/16 职场文书
2015年高校教师个人工作总结
2015/05/25 职场文书
画展观后感
2015/06/17 职场文书
Vue的生命周期一起来看看
2022/02/24 Vue.js