|
g_tk参数是腾讯在网页产品上经常使用的一个参数。
g_tk是由cookie中的skey计算生成的。
当我们得到skey后,循环取单字符的二进制并取左值.累加之后就得到后面的g_tk值了
网上有js、java、c#、易语言等语言的算法,但是php的算法却没有看到。
现在公布一下PHP的g_tk算法。
<?php
/*@
*@ (C) - 醉忆花颜 429590191@qq.com
*@
*@ Time:2012-11-15
*@
*@ Name:getGTK.php
*/
function getGTK($cookie){
preg_match_all("/=(.*?);/is",$cookie,$skey); //正则取skey
//print_r($skey);
$str = $skey[1][1];
$hash = 5381;
$len = strlen($str);
for($i = 0;$i < $len;$i++){
$h = ($hash << 5) + utf8_unicode($str[$i]);
$hash+=$h;
}
return $hash & 0x7fffffff;
}
function utf8_unicode($c) {
switch(strlen($c)) {
case 1:
return ord($c);
case 2:
$n = (ord($c[0]) & 0x3f) << 6;
$n += ord($c[1]) & 0x3f;
return $n;
case 3:
$n = (ord($c[0]) & 0x1f) << 12;
$n += (ord($c[1]) & 0x3f) << 6;
$n += ord($c[2]) & 0x3f;
return $n;
case 4:
$n = (ord($c[0]) & 0x0f) << 18;
$n += (ord($c[1]) & 0x3f) << 12;
$n += (ord($c[2]) & 0x3f) << 6;
$n += ord($c[3]) & 0x3f;
return $n;
}
}
$cookie = ' uin=o0429590191; skey=@OoVh7SrkG; '; //cookie
$G_tk = getGTK($cookie); //计算G_tk
echo $G_tk;
//其中utf8_unicode函数可用ord代替
?>
本文原地址
http://www.duzui.org/index.php/archives/78.html
|
|