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执行速度全攻略
Oct 09 PHP
PHP 正则表达式之正则处理函数小结(preg_match,preg_match_all,preg_replace,preg_split)
Oct 05 PHP
浅析关于PHP位运算的简单权限设计
Jun 30 PHP
php生成N个不重复的随机数实例
Nov 12 PHP
php计划任务之ignore_user_abort函数实现方法
Jan 08 PHP
linux下为php添加iconv模块的方法
Feb 28 PHP
PHP的数组中提高元素查找与元素去重的效率的技巧解析
Mar 03 PHP
php基于dom实现读取图书xml格式数据的方法
Feb 03 PHP
php中类和对象:静态属性、静态方法
Apr 09 PHP
php实现将二维关联数组转换成字符串的方法详解
Jul 31 PHP
PHP数组遍历的几种常见方式总结
Feb 15 PHP
gearman中任务的优先级和返回状态实例分析
Feb 27 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简单遍历对象示例
2016/09/28 PHP
PHP实现本地图片转base64格式并上传
2020/05/29 PHP
跨域请求之jQuery的ajax jsonp的使用解惑
2011/10/09 Javascript
{}与function(){}选用空对象{}来存放keyValue
2012/05/23 Javascript
浅谈js的setInterval事件
2014/12/05 Javascript
jQuery EasyUI 布局之动态添加tabs标签页
2015/11/18 Javascript
js判断登陆用户名及密码是否为空的简单实例
2016/05/16 Javascript
详解js中Json的语法与格式
2016/11/22 Javascript
Vue.js第二天学习笔记(vue-router)
2016/12/01 Javascript
Node.js数据库操作之查询MySQL数据库(二)
2017/03/04 Javascript
详解vuex中mapState,mapGetters,mapMutations,mapActions的作用
2018/04/13 Javascript
Angularjs中date过滤器失效的问题及解决方法
2018/07/06 Javascript
vue用Object.defineProperty手写一个简单的双向绑定的示例
2018/07/09 Javascript
泛谈JS逻辑判断选择器 || &amp;&amp;
2019/05/24 Javascript
详解webpack引用jquery(第三方模块)的三种办法
2019/08/21 jQuery
在Django框架中编写Contact表单的教程
2015/07/17 Python
深入理解Python单元测试unittest的使用示例
2017/11/18 Python
python算法与数据结构之冒泡排序实例详解
2019/06/22 Python
Django框架 查询Extra功能实现解析
2019/09/04 Python
Windows平台Python编程必会模块之pywin32介绍
2019/10/01 Python
python环境搭建和pycharm的安装配置及汉化详细教程(零基础小白版)
2020/08/19 Python
python学习之使用Matplotlib画实时的动态折线图的示例代码
2021/02/25 Python
CSS3贝塞尔曲线示例:创建链接悬停动画效果
2020/11/19 HTML / CSS
Html5之svg可缩放矢量图形_动力节点Java学院整理
2017/07/17 HTML / CSS
HTML5是否真的可以取代Flash
2010/02/10 HTML / CSS
匈牙利最大的健身制造商和销售商:inSPORTline
2018/10/30 全球购物
中学生打架检讨书
2014/02/10 职场文书
《邮票齿孔的故事》教学反思
2014/02/22 职场文书
优秀学生评语大全
2014/04/25 职场文书
小学生三分钟演讲稿
2014/08/18 职场文书
电子商务实训报告总结
2014/11/05 职场文书
稽核岗位职责
2015/02/10 职场文书
用python删除文件夹中的重复图片(图片去重)
2021/05/12 Python
Mysql数据库按时间点恢复实战记录
2021/06/30 MySQL
python的列表生成式,生成器和generator对象你了解吗
2022/03/16 Python
MSSQL基本语法操作
2022/04/11 SQL Server