UCenter中的一个可逆加密函数authcode函数代码

 更新时间:2010年07月20日 01:40:37   转载 作者:  
浏览UCenter源代码的时候发现这个函数,刚好有需要,就记录一下。
复制代码 代码如下:

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+MySQL删除操作实例

    PHP+MySQL删除操作实例

    这篇文章主要介绍了PHP+MySQL删除操作的方法,实例分析了MySQL删除信息的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-01-01
  • 用php随机生成福彩双色球号码的2种方法

    用php随机生成福彩双色球号码的2种方法

    这里为大家介绍用php随机生成福彩双色球号码的二种方法,供朋友们学习参考。新的一年,祝大家中大奖,发大财
    2013-02-02
  • php运行提示:Fatal error Allowed memory size内存不足的解决方法

    php运行提示:Fatal error Allowed memory size内存不足的解决方

    这篇文章主要介绍了php运行提示:Fatal error Allowed memory size内存不足的解决方法,分别针对有服务器管理权限和没有服务器管理权限的情况分析解决方法,是非常实用的技巧,需要的朋友可以参考下
    2014-12-12
  • php中使用base HTTP验证的方法

    php中使用base HTTP验证的方法

    这篇文章主要介绍了php中使用base HTTP验证的方法,涉及预定义服务器变量$_SERVER及header方法的相关使用技巧,需要的朋友可以参考下
    2015-04-04
  • 深入PHP许愿墙模块功能分析

    深入PHP许愿墙模块功能分析

    本篇文章是对PHP实现许愿墙的模块功能进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • 教你如何快捷的使用cmd访问mysql小技巧

    教你如何快捷的使用cmd访问mysql小技巧

    平时我们如果想用cmd访问mysql数据库,需要先一步步进入到mysql的目录下,才能执行MYSQL命令,进行操作,下面介绍一种直接在cmd中执行mysql命令的方法,大赞!
    2014-05-05
  • php对csv文件的读取,写入,输出下载操作详解

    php对csv文件的读取,写入,输出下载操作详解

    以下是php对csv文件的读取,写入,输出下载操作进行了详细的分析介绍,需要的朋友可以过来参考下
    2013-08-08
  • PHP5中使用PDO连接数据库的方法

    PHP5中使用PDO连接数据库的方法

    PDO(PHP Data Object) 是PHP 5 中加入的东西,是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接和处理,什么 php_mysql.dll、php_pgsql.dll、php_mssql.dll、php_sqlite.dll等等。
    2010-08-08
  • php自定义时间转换函数示例

    php自定义时间转换函数示例

    这篇文章主要介绍了php自定义时间转换函数,可实现时间戳与字符串时间显示格式之间的转换功能,需要的朋友可以参考下
    2016-12-12
  • 基于php编程规范(详解)

    基于php编程规范(详解)

    下面小编就为大家带来一篇基于php编程规范(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08

最新评论