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 相关文章推荐
header()函数使用说明
Nov 23 PHP
解析php中的fopen()函数用打开文件模式说明
Jun 20 PHP
简单实用的网站PHP缓存类实例
Jul 18 PHP
php实现建立多层级目录的方法
Jul 19 PHP
PHP页面实现定时跳转的方法
Oct 31 PHP
php生成唯一的订单函数分享
Feb 02 PHP
IIS 7.5 asp Session超时时间设置方法
Apr 17 PHP
PHP laravel中的多对多关系实例详解
Jun 07 PHP
Symfony2针对输入时间进行查询的方法分析
Jun 28 PHP
PHP实现的链式队列结构示例
Sep 15 PHP
Laravel框架实现文件上传的方法分析
Sep 29 PHP
详解使用php-cs-fixer格式化代码
Sep 16 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
德生PL990,目前市面上唯一一款便携式插卡蓝牙全波段高性能收音机
2021/03/02 无线电
PHP创建多级目录的两种方法
2016/10/28 PHP
php抽象类和接口知识点整理总结
2019/08/02 PHP
js刷新框架子页面的七种方法代码
2008/11/20 Javascript
ExtJS 入门
2010/10/29 Javascript
在次封装easyui-Dialog插件实现代码
2010/11/14 Javascript
js jquery数组介绍
2012/07/15 Javascript
jQuery使用之设置元素样式用法实例
2015/01/19 Javascript
Flash图片上传组件 swfupload使用指南
2015/03/14 Javascript
js实现兼容IE和FF的上下层的移动
2015/05/04 Javascript
使用javascript提交form表单方法汇总
2015/06/25 Javascript
基于Javascript倒计时效果
2016/12/22 Javascript
web 屏蔽BackSpace键实例代码
2016/12/24 Javascript
浅析 NodeJs 的几种文件路径
2017/06/07 NodeJs
JS实现的将html转为pdf功能【基于浏览器端插件jsPDF】
2018/02/06 Javascript
node.js基础知识小结
2018/02/26 Javascript
[52:31]VP vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
使用Python判断IP地址合法性的方法实例
2014/03/13 Python
python脚本实现分析dns日志并对受访域名排行
2014/09/18 Python
利用Python绘制MySQL数据图实现数据可视化
2015/03/30 Python
tensorflow实现简单的卷积神经网络
2018/05/24 Python
python实现小球弹跳效果
2019/05/10 Python
检测python爬虫时是否代理ip伪装成功的方法
2019/07/12 Python
python实现将视频按帧读取到自定义目录
2019/12/10 Python
使用matlab 判断两个矩阵是否相等的实例
2020/05/11 Python
python根据字典的键来删除元素的方法
2020/08/16 Python
神路信息Java面试题目
2013/03/31 面试题
先进事迹报告会感言
2014/01/24 职场文书
党员学习中共十八大思想报告
2014/09/12 职场文书
幼儿园感恩节活动方案
2014/10/06 职场文书
党员检讨书
2014/10/13 职场文书
2014年健康教育工作总结
2014/11/20 职场文书
张丽莉事迹观后感
2015/06/16 职场文书
小学教师读书笔记
2015/07/01 职场文书
JavaScript利用html5新方法操作元素类名详解
2021/11/27 Javascript
React更新渲染原理深入分析
2022/12/24 Javascript