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 相关文章推荐
基于数据库的在线人数,日访问量等统计
Oct 09 PHP
让你同时上传 1000 个文件 (二)
Oct 09 PHP
PHP语法速查表
Jan 02 PHP
PHP中用接口、抽象类、普通基类实现“面向接口编程”与“耦合方法”简述
Mar 23 PHP
phpstrom使用xdebug配置方法
Dec 17 PHP
更改localhost为其他名字的方法
Feb 10 PHP
兼容PHP和Java的des加密解密代码分享
Jun 26 PHP
PHP保存session到memcache服务器的方法
Jan 19 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
Jan 24 PHP
PHP有序表查找之插值查找算法示例
Feb 10 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
Feb 21 PHP
php与阿里云短信接口接入操作案例分析
May 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
ZF等常用php框架中存在的问题
2008/01/10 PHP
php 什么是PEAR?(第二篇)
2009/03/19 PHP
php简单判断文本编码的方法
2015/07/30 PHP
PHP常用的小程序代码段
2015/11/14 PHP
利用PHP自动生成印有用户信息的名片
2016/08/01 PHP
wordpress网站转移到本地运行测试的方法
2017/03/15 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
2017/04/18 PHP
PHP 文件写入和读取操作实例详解【必看篇】
2019/11/04 PHP
php使用event扩展的io复用测试的示例
2020/10/20 PHP
javascript 在firebug调试时用console.log的方法
2012/05/10 Javascript
页面图片浮动左右滑动效果的简单实现案例
2014/02/10 Javascript
使用jquery修改表单的提交地址基本思路
2014/06/04 Javascript
javascript 面向对象封装与继承
2014/11/27 Javascript
NodeJS学习笔记之MongoDB模块
2015/01/13 NodeJs
Vue ElementUi同时校验多个表单(巧用new promise)
2018/06/06 Javascript
Vue2.0 实现歌手列表滚动及右侧快速入口功能
2018/08/08 Javascript
详解Node.js一行命令上传本地文件到服务器
2019/04/22 Javascript
微信小程序实现跳转的几种方式总结(推荐)
2019/04/24 Javascript
jQuery中DOM常见操作实例小结
2019/08/01 jQuery
vue 解决异步数据更新问题
2019/10/29 Javascript
js String.prototype.trim字符去前后空格的扩展
2020/08/23 Javascript
在vue中给后台接口传的值为数组的格式代码
2020/11/12 Javascript
Python实现获取操作系统版本信息方法
2015/04/08 Python
Python 爬虫学习笔记之多线程爬虫
2016/09/21 Python
使用Turtle画正螺旋线的方法
2017/09/22 Python
如何在python字符串中输入纯粹的{}
2018/08/22 Python
用Python读取几十万行文本数据
2018/12/24 Python
Python 中 -m 的典型用法、原理解析与发展演变
2019/11/11 Python
基于Python制作一副扑克牌过程详解
2020/10/19 Python
python 利用opencv实现图像网络传输
2020/11/12 Python
一款纯css3实现的tab选项卡的实列教程
2014/12/11 HTML / CSS
浅析HTML5中header标签的用法
2016/06/24 HTML / CSS
工作迟到检讨书
2014/02/21 职场文书
带香烟到学校抽的检讨书
2014/09/25 职场文书
公司离职证明范本
2014/10/17 职场文书
golang特有程序结构入门教程
2021/06/02 Python