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转成EXE文件
Oct 09 PHP
PHP经典的给图片加水印程序
Dec 06 PHP
手把手教你使用DedeCms的采集的图文教程
Mar 11 PHP
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
Jun 29 PHP
PHP动态柱状图实现方法
Mar 30 PHP
php实现的RSS生成类实例
Apr 23 PHP
学习php设计模式 php实现适配器模式
Dec 07 PHP
PHP+MySql+jQuery实现的&quot;顶&quot;和&quot;踩&quot;投票功能
May 21 PHP
PHP MYSQL简易交互式站点开发
Dec 27 PHP
PHP中Notice错误常见解决方法
Apr 28 PHP
PHP封装的完整分页类示例
Aug 21 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
Sep 10 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代码
2010/07/17 PHP
PHP 简易输出CSV表格文件的方法详解
2013/06/20 PHP
php Imagick获取图片RGB颜色值
2014/07/28 PHP
php+MySQL判断update语句是否执行成功的方法
2014/08/28 PHP
php防止网站被刷新的方法汇总
2014/12/01 PHP
php文件操作相关类实例
2015/06/18 PHP
php防止用户重复提交表单
2015/11/02 PHP
php session实现多级目录存放实现代码
2016/02/03 PHP
JavaScript中“+=”的应用
2007/02/02 Javascript
基于JQuery的日期联动实现代码
2011/02/24 Javascript
基于jquery库的tab新形式使用
2012/11/16 Javascript
JavaScript作用域与作用域链深入解析
2013/12/06 Javascript
js实现纯前端的图片预览
2016/04/27 Javascript
JS实现简单抖动效果
2017/06/01 Javascript
详解基于webpack2.x的vue2.x的多页面站点
2017/08/21 Javascript
Validform验证时可以为空否则按照指定格式验证
2017/10/20 Javascript
Node.js 中使用 async 函数的方法
2017/11/20 Javascript
ES6 Promise对象的应用实例分析
2019/06/27 Javascript
javascript实现计算器功能
2020/03/30 Javascript
JS 创建对象的模式实例小结
2020/04/28 Javascript
[01:32:22]DOTA2-DPC中国联赛 正赛 Ehome vs VG BO3 第一场 2月5日
2021/03/11 DOTA
使用实现pandas读取csv文件指定的前几行
2018/04/20 Python
浅谈python中get pass用法
2019/03/19 Python
python找出一个列表中相同元素的多个索引实例
2019/06/11 Python
python深copy和浅copy区别对比解析
2019/12/26 Python
解决TensorFlow GPU版出现OOM错误的问题
2020/02/03 Python
解决pytorch 的state_dict()拷贝问题
2021/03/03 Python
html5 乒乓球(碰撞检测)实例二
2013/07/25 HTML / CSS
澳大利亚冒险体验:Adrenaline(跳伞、V8赛车、热气球等)
2017/09/18 全球购物
Mountain Warehouse波兰官方网站:英国户外品牌
2019/08/29 全球购物
应届生煤化工求职信
2013/10/21 职场文书
数控技术学生的自我评价
2014/02/15 职场文书
保安队长职务说明书
2014/02/23 职场文书
机关职员工作检讨书
2014/10/23 职场文书
PyCharm配置KBEngine快速处理代码提示冲突、配置命令问题
2021/04/03 Python
js中Map和Set的用法及区别实例详解
2022/02/15 Javascript