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实现WEB动态网页静态
Oct 09 PHP
PHP学习之PHP变量
Oct 09 PHP
php面向对象全攻略 (十六) 对象的串行化
Sep 30 PHP
php addslashes和mysql_real_escape_string
Jan 24 PHP
PHP依赖倒置(Dependency Injection)代码实例
Oct 11 PHP
php中in_array函数用法分析
Nov 15 PHP
在php和MySql中计算时间差的方法详解
Mar 27 PHP
Symfony学习十分钟入门经典教程
Feb 03 PHP
利用PHPExcel实现Excel文件的写入和读取
Apr 26 PHP
PHP addslashes()函数讲解
Feb 03 PHP
laravel excel 上传文件保存到本地服务器功能
Nov 14 PHP
阿里云服务器搭建Php+Apache运行环境的详细过程
May 15 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/09 PHP
Laravel框架实现文件上传的方法分析
2019/09/29 PHP
基于jquery库的tab新形式使用
2012/11/16 Javascript
网站繁简切换的JS遇到页面卡死的解决方法
2014/03/12 Javascript
javascript实现仿腾讯游戏选择
2015/05/14 Javascript
利用JavaScript脚本实现滚屏效果的方法
2015/07/07 Javascript
基于AngularJS实现iOS8自带的计算器
2016/09/12 Javascript
关于Function中的bind()示例详解
2016/12/02 Javascript
微信小程序 数组中的push与concat的区别
2017/01/05 Javascript
BootStrap中的Fontawesome 图标
2017/05/25 Javascript
微信小程序对接七牛云存储的方法
2017/07/30 Javascript
给vue项目添加ESLint的详细步骤
2017/09/29 Javascript
详解刷新页面vuex数据不消失和不跳转页面的解决
2018/01/30 Javascript
Vue项目中添加锁屏功能实现思路
2018/06/29 Javascript
node中的session的具体使用
2018/09/14 Javascript
详解vue.js移动端配置flexible.js及注意事项
2019/04/10 Javascript
浅谈vuex的基本用法和mapaction传值问题
2019/11/08 Javascript
分析在Python中何种情况下需要使用断言
2015/04/01 Python
Tensorflow之构建自己的图片数据集TFrecords的方法
2018/02/07 Python
Python 一键制作微信好友图片墙的方法
2019/05/16 Python
python中JWT用户认证的实现
2020/05/18 Python
Python 实现二叉查找树的示例代码
2020/12/21 Python
AJAX的优缺点都有什么
2015/08/18 面试题
机电专业个人自荐信格式模板
2013/09/23 职场文书
上班上网检讨书
2014/01/29 职场文书
前台文员职责范本
2014/03/07 职场文书
给小学生的新年寄语
2014/04/04 职场文书
行政内勤岗位职责
2014/04/07 职场文书
迎七一演讲稿
2014/09/12 职场文书
孝老爱亲事迹材料
2014/12/24 职场文书
文案策划岗位职责
2015/02/11 职场文书
2015年计生工作总结范文
2015/04/24 职场文书
办公室年度工作总结2015
2015/05/21 职场文书
小学六一儿童节活动开幕词
2016/03/04 职场文书
正确使用MySQL INSERT INTO语句
2021/05/26 MySQL
Redis实现短信验证码登录的示例代码
2022/06/14 Redis