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 相关文章推荐
很实用的一个完整email发送程序
Oct 09 PHP
php中判断一个字符串包含另一个字符串的方法
Mar 19 PHP
php 操作excel文件的方法小结
Dec 31 PHP
PHP中substr()与explode()函数用法分析
Nov 24 PHP
Zend Framework开发入门经典教程
Mar 23 PHP
详解ThinkPHP3.2.3验证码显示、刷新、校验
Dec 29 PHP
PHP实现二维数组中的查找算法小结
Jun 09 PHP
swoole_process实现进程池的方法示例
Oct 29 PHP
laravel withCount 统计关联数量的方法
Oct 10 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
Mar 29 PHP
基于PHP的登录和注册的功能的实现
Aug 06 PHP
浅谈Laravel中使用Slack进行异常通知
May 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
yii实现model添加默认值的方法(2种方法)
2016/01/06 PHP
在laravel中实现事务回滚的方法
2019/10/10 PHP
PHP SESSION跨页面传递失败解决方案
2020/12/11 PHP
js停止输出代码
2008/07/20 Javascript
自己动手制作jquery插件之自动添加删除行的实现
2011/10/13 Javascript
JavaScript获取table中某一列的值的方法
2014/05/06 Javascript
javascript与css3动画结合使用小结
2015/03/11 Javascript
jQuery表格插件datatables用法汇总
2016/03/29 Javascript
bootstrap table之通用方法( 时间控件,导出,动态下拉框, 表单验证 ,选中与获取信息)代码分享
2017/01/24 Javascript
使用jQuery实现购物车结算功能
2017/08/15 jQuery
Three.js基础学习之场景对象
2017/09/27 Javascript
vue 运用mock数据的示例代码
2017/11/07 Javascript
JS实现简易换图时钟功能分析
2018/01/04 Javascript
vue-router相关基础知识及工作原理
2018/03/16 Javascript
angularjs 缓存的使用详解
2018/03/19 Javascript
微信小程序事件对象中e.target和e.currentTarget的区别详解
2019/05/08 Javascript
nuxt踩坑之Vuex状态树的模块方式使用详解
2019/09/06 Javascript
这15个Vue指令,让你的项目开发爽到爆
2019/10/11 Javascript
vue解决使用$http获取数据时报错的问题
2019/10/30 Javascript
卸载vue2.0并升级vue_cli3.0的实例讲解
2020/02/16 Javascript
解决Echarts 显示隐藏后宽度高度变小的问题
2020/07/19 Javascript
[49:08]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第一场 11.27
2020/12/01 DOTA
Python中用memcached来减少数据库查询次数的教程
2015/04/07 Python
pytorch的梯度计算以及backward方法详解
2020/01/10 Python
python 实现线程之间的通信示例
2020/02/14 Python
python selenium自动化测试框架搭建的方法步骤
2020/06/14 Python
移动端Web页面的CSS3 flex布局快速上手指南
2016/05/31 HTML / CSS
html5+CSS3+JS实现七夕言情功能代码
2017/08/28 HTML / CSS
HTML5所有标签汇总及标签意义解释
2015/03/12 HTML / CSS
C语言中break与continue的区别
2012/07/12 面试题
物流司机岗位职责
2013/12/28 职场文书
预防煤气中毒方案
2014/06/16 职场文书
2016年感恩母亲节活动总结
2016/04/01 职场文书
2019年XX公司的晨会制度及流程!
2019/07/23 职场文书
创业计划书之情侣餐厅
2019/09/29 职场文书
css布局巧妙技巧之css三角示例的运用
2022/03/16 HTML / CSS