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实现多条件查询实例代码
Jul 17 PHP
php下连接mssql2005的代码
Jan 17 PHP
基于PHP文件操作的详解
Jun 05 PHP
PHP中mysqli_affected_rows作用行数返回值分析
Dec 26 PHP
Laravel 5 框架入门(四)完结篇
Apr 09 PHP
php动态生成缩略图并输出显示的方法
Apr 20 PHP
php从文件夹随机读取文件的方法
Jun 01 PHP
php 运算符与表达式详细介绍
Nov 30 PHP
[企业公众号]升级到[企业微信]之后发送消息失败的解决方法
Jun 30 PHP
为Plesk PHP7启用Oracle OCI8扩展方法总结
Mar 29 PHP
关于Curl在Swoole协程中的解决方案详析
Sep 12 PHP
Laravel5.1 框架Request请求操作常见用法实例分析
Jan 04 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
玩转虚拟域名◎+ .
2006/10/09 PHP
php 获得汉字拼音首字母的函数
2009/08/01 PHP
php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法
2013/08/10 PHP
PHP抓取网页、解析HTML常用的方法总结
2015/07/01 PHP
php判断目录存在的简单方法
2019/09/26 PHP
php连接mysql之mysql_connect()与mysqli_connect()的区别
2020/07/19 PHP
jquery浏览器滚动加载技术实现方案
2014/06/03 Javascript
jQuery层动画定位滑动效果的方法
2015/04/30 Javascript
简介JavaScript中的setTime()方法的使用
2015/06/11 Javascript
IE8下jQuery改变png图片透明度时出现的黑边
2015/08/30 Javascript
轻松学习jQuery插件EasyUI EasyUI表单验证
2015/12/01 Javascript
AngularJS 模型详细介绍及实例代码
2016/07/27 Javascript
Javascript使用SWFUpload进行多文件上传
2016/11/16 Javascript
BootStrap轮播HTML代码(推荐)
2016/12/10 Javascript
JS中实现函数return多个返回值的实例
2017/02/21 Javascript
js移动端图片压缩上传功能
2020/08/18 Javascript
JavaScript实用代码小技巧
2018/08/23 Javascript
jQuery实现放大镜案例
2020/10/19 jQuery
elementui实现预览图片组件二次封装
2020/12/29 Javascript
[01:07:22]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG加赛
2014/05/26 DOTA
python实现百万答题自动百度搜索答案
2018/01/16 Python
python3连接MySQL数据库实例详解
2018/05/24 Python
Django REST framework 分页的实现代码
2019/06/19 Python
python的slice notation的特殊用法详解
2019/12/27 Python
Python接口测试环境搭建过程详解
2020/06/29 Python
django序列化时使用外键的真实值操作
2020/07/15 Python
ProForm英国站点:健身房和健身器材网上商店
2019/06/05 全球购物
PPP协议组成及简述协议协商的基本过程
2015/05/28 面试题
Prototype如何更新局部页面
2013/03/03 面试题
九年级体育教学反思
2014/01/23 职场文书
关于安全演讲稿
2014/05/09 职场文书
家长会欢迎标语
2014/06/24 职场文书
建筑质检员岗位职责
2015/04/08 职场文书
餐馆开业致辞
2015/08/01 职场文书
公务员廉洁从政心得体会
2016/01/19 职场文书
「魔导具师妲莉亚永不妥协~从今天开始的自由职人生活~」1、2卷发售宣传CM公开
2022/03/21 日漫