在百度搜索 g_tk,只得到几个可怜而且不完整的答案,因此,我首次在源始时代公开一下QQ空间的 g_tk算法。其实 g_tk只是QQ空间对日志进行操作的时候,所采取的一套安全机制,如果 g_tk字符串的值不对的话,请求是没有办法提交的,因此,很多刚刚涉及HTTP协议技术的人想对QQ空间这尊大佛动手脚的话,只能望而却步。下面我以VB为例,在这里详解一下 g_tk的计算方法。
其实 g_tk校验是通过skey值来算出来的,弄过QQ登录的人可能都知道,在登录成功之后,cookies里都会返回skey值,通常是以@开头,并且带有一串看似无规则的大小写字母混合,总共10位。下面我们先来抓包看看, g_tk到底用在了哪里,我们以转载日志为例来抓包,上图:

完整数据包内容如下:
POST /cgi-bin/blognew/blog_quote HTTP/1.1Accept: */*Accept-Language: zh-cnReferer: http://b.qzone.qq.com/proxy.htmlIf-Modified-Since: 0Content-Type: application/x-www-form-urlencodedAccept-Encoding: gzip, deflateUser-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0)Host: b.qzone.qq.comContent-Length: 65Connection: Keep-AliveCache-Control: no-cacheCookie: pt2gguin=o0138001655; ptcz=0b25a27219dd08bcfe38fc85365593dadb1a2a99cac9f1abfd5fb31a7052f89b; pvid=6724688319; flv=10.0; adid=138001655; adSP=GHTsOtSHTIJdDIr9+GXVoaFY59pet/LONpbU1rA0yPY=_837_326830_1290874683_; adVer=3121; ac=1,030,006; ptui_qstatus=2; uin=o0138001655; skey=@sZmfEEBdt; ptisp=ctc; ssid=s8226120880; login_time=B46BD5B3A93F9EC5226847DB4AE9A71589641475FCCEBBC9; __Q_w_s__appDataSeed=1; randomSeed=220115
uin=138001655&fromuin=715746717&blogid=1286714133& g_tk=1423927145
   我们可以看到,数据包主体部分最后一个参数就是 g_tk值,一般是一串数字。那这个值到底怎么算出来的呢?
因为我们在网页登录QQ的时候,腾讯都会通过cookies里的skey值来计算,用js来算。既然在运算的时候执行了js脚本,那么我们就可以在抓包中获得。那 g_tk是通过什么算法算出来的?其实很简单,当我们得到skey后,循环取单字符的二进制并取左值.累加之后就得到后面的 g_tk值了,这听上去很复杂,不过算法不用我们自己写,我们只需要执行在腾讯网页登录的时候所执行的那个js脚本就可以了。当然,js不能直接调用,不过既然我写了这篇文章,就已经是有备而来的,js算法我已经整理并写了一个最简单的,代码如下:
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 & 0x7fffffff;
}
   那么我们现在还有两个问题没有解决:
1.如何获取登录后的cookies?
2.如何在VB中执行js代码并得到返回值?

上面两个问题其实到了你们手里,我相信也不会是问题了,下面我再通过代码以及讲解,来剖析并解决这两个所谓的问题。对于HTTP数据包POST/GET,相信看这篇文章的人应该都懂得吧,否则你看了也没用,那么我们可以设计一个登录程序,并在登录之后获取cookies中的skey值,并计算出 g_tk。下面设计个登录界面:

以下是源码,请移步到原帖地址(带源码下载):
http://www.codeages.com/forum.php?mod=viewthread&tid=43004&extra=page%3D1

腾讯QQ空间g_tk算法相关推荐

  1. 腾讯qq空间GET登陆JS分析

    腾讯QQ空间作为腾讯的社交核心产品之一,在登陆的安全设置上没有用变态的技术,都是常规策略.可能是因为该产品内容上的价值对于用户而言重要,但是对于他人来说并不重要. 老规矩首先抓个包试试看看那登陆请求有 ...

  2. 腾讯QQ空间技术总监,T13专家被裁,原因令人唏嘘

    大家好,我是校长. 最近这几天,腾讯前端开发领袖.原腾讯 QQ 空间技术总监.T13 专家黄希彤被其夫人曝离职,据爆料好像是被裁. 据腾讯云官网介绍,黄希彤为前端开发领袖,前腾讯云布道师,腾讯首个 W ...

  3. php仿qq空间,PHP实现的QQ空间g_tk加密算法

    本文实例讲述了PHP实现的QQ空间g_tk加密算法..具体如下: //G_tk计算 function getGTK($skey){ $hash = 5381; for($i=0;$i $hash += ...

  4. qq密码加密算法php,PHP实现的QQ空间g_tk加密算法

    本文实例讲述了PHP实现的QQ空间g_tk加密算法.分享给大家供大家参考.具体如下: //G_tk计算 function getGTK($skey){ $hash = 5381; for($i=0;$ ...

  5. 原腾讯QQ空间负责人,T13专家,黄希彤被爆近期被裁员,裁员原因令人唏嘘。。...

    点击上方"码农突围",马上关注 这里是码农充电第一站,回复"666",获取一份专属大礼包 真爱,请设置"星标"或点个"在看 这是[ ...

  6. 腾讯QQ影像中心招聘算法实习生

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 腾讯QQ影像中心(北京)招聘算法实习生 工作地点北京,岗位描述如下,感兴趣的请发送简历到:xinlongwa ...

  7. 空间发表说说html页面实现原理,空间说说还能这样玩?jquery开发腾讯QQ空间说说发表效果...

    web前端学习群,189394454,有视频.源码.学习方法等大量干货分享 经常发说说的朋友对这效果很熟悉吧,对的,就是空间说说发表,每天发说说是这样发,但是怎么做到的呢?

  8. qq空间密码算法java_QQ空间密码加密方式

    无标题 //http://ptlogin2.qq.com/login?u=**********&p=A51836AE9AE14D8707EC8B2B755050D9&verifycod ...

  9. qq空间密码算法java_C#最新版QQ空间密码加密算法

    年底了,先预祝各位朋友新年快乐.最近这段时间工作比较忙,晚上就一直在写一个关于 /// 根据QQ号码和验证码加密密码 /// /// QQ号码 /// QQ密码 /// 验证码 /// 密码密文 pu ...

最新文章

  1. 计算机的启动过程———《x86汇编语言:从实模式到保护模式》读书笔记补遗01
  2. WebRTC 的音频处理流水线
  3. Exchange 邮件投递被拒的问题分析
  4. 【liferay】6、关于liferay中使用requestMapping映射地址提交表单
  5. Windows10安装Ubuntu子系统+docker教程说明
  6. 【洛谷P4719】动态DP【LCT】【矩阵】
  7. MAC OS 如何安装命令行工具:Command Line Tools
  8. ubuntu14.04升级以及gitlab升级
  9. __weak 修饰符
  10. matlab2c使用c++实现matlab函数系列教程-reshape函数
  11. 有哪些让人相见恨晚的记笔记方法?
  12. WPS for Linux(ubuntu)字体配置(字体缺失解决办法)
  13. 【ShareSDK社会化分享】新浪微博分享网络图片问题
  14. nar神经网络_NAR 神经网络多步和单步预测
  15. 龙之谷怎么进去服务器维护,龙之谷端游服务器爆满怎么进
  16. Job for named.service failed because the control process exited with error code.
  17. ubuntu 16.04 桌面版 双击自动删除文字 解决方案
  18. 阿里云大数据ACA考点总结
  19. 天池比赛:工业蒸汽量预测
  20. 【TensorFlow基础函数】tf.concat的用法

热门文章

  1. 青蛙的约会(洛谷-P1516)
  2. 电池的寿命(信息学奥赛一本通-T1229)
  3. 信息学奥赛C++语言: 第n小的质数
  4. java的课后作业咋写_写的简单的java第三季的课后作业
  5. 降维:用 PCA 压缩数据集
  6. 笨方法“学习python笔记之urlopen
  7. 2021.08.22学习内容torch.cat()和torch.stack()函数
  8. flask带有传入参数既有URL还有其他参数类型:建议使用方式二(flask 使用查询字符串的方式)
  9. Conv2d中的groups参数(分组卷积)怎么理解? 【分组卷积可以减少参数量、且不容易过拟合(类似正则化)】
  10. fastjson 添加key value_FastJson迁移至Jackson