g_tk算法详解

g_tk是腾讯在QQ空间这一领域使用的密文(其他的地方我没遇到g_tk),有写数据包或者url参数中需要加入你计算出的g_tk才能成功!但是也有例外,也有些地方不需要g_tk也一样成功,为了程序的严谨,建议大家要计算g_tk的值。

g_tk是根据从cookie中获取skey的值加密得到的。
其实g_tk是这样获取的:g_tk=getGTK(skey)
所以想计算g_tk必须先获取skey,并且有g_tk算法getGTK函数。
微软给我们提供了获取cookie的API函数,我们直接调用就很方便的获取cookie

rivate Declare Function InternetGetCookie Lib "wininet.dll" Alias "InternetGetCookieA" (ByVal lpszUrlName As String, ByVal lpszCookieName As String, ByVal lpszCookieData As String, lpdwSize As Long) As Boolean
Dim nLen  As Long
Dim sbuff As String * 1024
nLen = 1024
'获取cookies
InternetGetCookie "http://ptlogin2.qq.com/login", vbNullString, sbuff, nLen
'此时sbuff变量里面就是http://ptlogin2.qq.com/login对应的cookie
Dim skey As String
Dim sPos As Long
sPos = InStr(sbuff, "skey=@")
If sPos <> 0 Then
skey = Mid(sbuff, sPos + 5, 10)


'这样就从cookie中将skey的值提取出来了

以前在js文件中找到了g_tk算法函数,如下:

function getGTK(str){
var hash = 5381;
for(var i = 0, len = str.length; i < len; ++i){
hash += (hash << 5) + str.charAt(i).charCodeAt();
}
return hash ;
}


后来我用VB中的可以执行脚本语言的ScriptControl控件执行它,获得g_tk的值:

 

ScriptControl1.Language = "Jscript"
 ScriptControl1.Timeout = -1
ScriptControl1.AddCode txtVarHexcase.Text
Dim js(7) As String
js(0) = "function getGTK(str){" & vbCrLf
js(1) = "var hash = 5381;" & vbCrLf
js(2) = "for(var i = 0, len = str.length; i < len; ++i){" & vbCrLf
js(3) = "    hash += (hash << 5) + str.charAt(i).charCodeAt();" & vbCrLf
js(4) = "}" & vbCrLf
js(5) = " return hash ;" & vbCrLf
js(6) = "}"
ScriptControl1.AddCode js(0) & js(1) & js(2) & js(3) & js(4) & js(5) & js(6)
dim g_tk as string
g_tk = ScriptControl1.Run("getGTK", "123")'调用getGTK函数,参数为123,返回g_tk值是193432059


不懂javascript的朋友可能看不懂腾讯的代码,当我写完这个函数,大家就明白具体怎么回事了,很好理解。
大家要支持易我论坛啊,我以后在慢慢细谈我的经验,我挂科了,有点小郁闷,哎,但是一点也不影响我研究。

你可能感兴趣的:(技巧,编程)