发新话题
打印

[讨论]PHPWIND4.32的cookie双向加密问题

[讨论]PHPWIND4.32的cookie双向加密问题

原始连接:http://www.phpwind.net/read.php?tid=161585
信息来源:邪恶八进制信息安全团队(www.eviloctal.com
议题作者:sumic

今天看了下PHPWIND 4.32的代码,发现比起以前的版本对COOKIES进行了加密,这里有段代码根据我对照上下代码初步理解为加密的还原,但是有点不太明白,希望高手给点指点。
COOKIES里面保存的信息为
winduser=BTxVX1oBWwRcBgMIBFYFUwICAwEGC10HCAZcCVkABAYHVQ%3D%3D
代码为:
list($winduid,$windpwd)=explode("\t",StrCode($_COOKIE['winduser'],'DECODE'));
function StrCode($string,$action='ENCODE'){
$key= substr(md5($_SERVER["HTTP_USER_AGENT"].$GLOBALS['db_hash']),8,18);
$string= $action == 'ENCODE' ? $string : base64_decode($string);
$len= strlen($key);
$code= '';
for($i=0; $i<strlen($string); $i++){
$k= $i % $len;
$code .= $string[$i] ^ $key[$k];
}
$code = $action == &#39;DECODE&#39; ? $code : base64_encode($code);
return $code;
}

关键在于
$key= substr(md5($_SERVER["HTTP_USER_AGENT"].$GLOBALS[&#39;db_hash&#39;]),8,18);
这个$key绝不是无所谓的!由于他使用了用户登陆名和数据库信息,所以对于任意用户来说都是唯一的

其他的事情就是扰码了
加密:
输入串按字节与$key做异或运算
返回结果的base64编码

解密:
base64解码后的输入串按字节与$key做异或运算
返回结果

TOP

把原始链接的回复信息也转一下过来:

议题作者:imkow1
恰好前阵子模拟过登陆,虽失败了,但也了解的了phpwind


function StrCode($string,$action=&#39;ENCODE&#39;)
{
  //密键以浏览器特征码(HTTP_USER_AGENT)和所谓的论坛安全认证参数(db_hash)并列后进行md5散列,取18字节字符
  $key= substr(md5($_SERVER["HTTP_USER_AGENT"].$GLOBALS[&#39;db_hash&#39;]),8,18);
  //判断动作是编码还是解码,解码时则先解base64
  $string= $action == &#39;ENCODE&#39; ? $string : base64_decode($string);
  //得到密键长度
  $len= strlen($key);
  //声明变量
  $code= &#39;&#39;;
  //循环i=密键长度次
  for($i=0; $i<strlen($string); $i++)
  {
   //得到当前循环键除以密键长度的余数,正常情况结果也在[0,17]
   $k= $i % $len;
   //指针方式将string字符串与密键进行XOR异或位运算
   $code .= $string[$i] ^ $key[$k];
  }
  //重新base64包装
  $code = $action == &#39;DECODE&#39; ? $code : base64_encode($code);
  //返回字符串
  return $code;
}
加密算法我知道的不多。只能从语法上大概知道动作

TOP

发新话题