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 17 PHP
php5 apache 2.2 webservice 创建与配置(java)
Jan 27 PHP
PHP session会话的安全性分析
Sep 08 PHP
smarty模板中拼接字符串的方法
Feb 14 PHP
PHP轻量级数据库操作类Medoo增加、删除、修改、查询例子
Jul 04 PHP
PHP命名空间(namespace)的动态访问及使用技巧
Aug 18 PHP
PHP环境搭建的详细步骤
Jun 30 PHP
php微信开发之带参数二维码的使用
Aug 03 PHP
PHP全功能无变形图片裁剪操作类与用法示例
Jan 10 PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
Aug 02 PHP
详细解读php的命名空间(二)
Feb 21 PHP
php中字符串和整数比较的操作方法
Jun 06 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微信公众平台开发类实例
2015/04/01 PHP
PHP中$_SERVER使用说明
2015/07/05 PHP
PHP redis实现超迷你全文检索
2017/03/04 PHP
PHP实现的堆排序算法详解
2017/08/17 PHP
采用CSS和JS,刚好我最近有个站点要用到下拉菜单!
2006/06/26 Javascript
JavaScript DOM学习第八章 表单错误提示
2010/02/19 Javascript
jQuery性能优化28条建议你值得借鉴
2013/02/16 Javascript
使用JS 清空File控件的路径值
2013/07/08 Javascript
zepto中使用swipe.js制作轮播图附swipeUp,swipeDown不起效果问题
2015/08/27 Javascript
js实现简单的验证码
2015/12/25 Javascript
jQuery grep()方法详解及实例代码
2016/10/30 Javascript
微信小程序 wxapp内容组件 progress详细介绍
2016/10/31 Javascript
详解angularJS自定义指令间的相互交互
2017/07/05 Javascript
详解vue 自定义marquee无缝滚动组件
2019/04/09 Javascript
浅谈Vuex的this.$store.commit和在Vue项目中引用公共方法
2020/07/24 Javascript
Vue切换Tab动态渲染组件的操作
2020/09/21 Javascript
JS实现多功能计算器
2020/10/28 Javascript
python 随机数使用方法,推导以及字符串,双色球小程序实例
2017/09/12 Python
python爬取拉勾网职位数据的方法
2018/01/24 Python
python中的set实现不重复的排序原理
2018/01/24 Python
python sys.argv[]用法实例详解
2018/05/25 Python
Scrapy基于selenium结合爬取淘宝的实例讲解
2018/06/13 Python
python实现根据文件格式分类
2019/10/31 Python
Python MySQLdb 执行sql语句时的参数传递方式
2020/03/04 Python
Web前端绘制0.5像素的几种方法
2017/08/11 HTML / CSS
HTML5 CSS3给网站设计带来出色效果
2009/07/16 HTML / CSS
分享一个H5原生form表单的checkbox特效代码
2018/02/26 HTML / CSS
New Balance英国官方网站:始于1906年,百年慢跑品牌
2016/12/07 全球购物
国家地理在线商店:Shop National Geographic
2018/06/30 全球购物
巴西独家产品和现场演示购物网站:Shoptime
2019/07/11 全球购物
创意广告词
2014/03/17 职场文书
城管大队整治方案
2014/05/06 职场文书
2014年民警工作总结
2014/11/25 职场文书
2015年幼师个人工作总结
2015/10/15 职场文书
教师研修随笔感言
2015/11/18 职场文书
Python进程池与进程锁之语法学习
2022/04/11 Python