欢迎访问 如意编程网!

如意编程网

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

g_tk算法详解

发布时间:2024/5/15 编程问答 19 豆豆
如意编程网 收集整理的这篇文章主要介绍了 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的朋友可能看不懂腾讯的代码,当我写完这个函数,大家就明白具体怎么回事了,很好理解。
大家要支持易我论坛啊,我以后在慢慢细谈我的经验,我挂科了,有点小郁闷,哎,但是一点也不影响我研究。

总结

以上是如意编程网为你收集整理的g_tk算法详解的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得如意编程网网站内容还不错,欢迎将如意编程网推荐给好友。