腾讯QQ会员中心g_tk32算法【C#版】
最近用C#写qq活动辅助类程序,碰到了会员签到的gtk算法不一样,后来网上找了看,发现有php版的(https://www.oschina.net/code/snippet_1378052_48831)
后来参考了php版的查php相关的资料用C#写了一个:
/// <summary>
/// 计算gtk32值
/// </summary>
/// <param name="skey"></param>
/// <returns></returns>
public static string GetGTK32(string skey)
{
var hash = ;
var md5Key = "tencentQQVIP123443safde&!%^%1282";
var start = hash << ;
var result = string.Empty;
for (int i = ; i < skey.Length; i++)
{
var ascode = CharToASCII(skey.Substring(i, ));
result += (hash << ) + ascode;
hash = ascode;
}
var str = start + (result + md5Key);
return GetMD5(str);
} /// <summary>
/// MD5加密
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
public static string GetMD5(string text)
{
StringBuilder sb = new StringBuilder();
using (MD5 md5 = MD5.Create())
{
byte[] md5Byte = md5.ComputeHash(Encoding.Default.GetBytes(text));
for (int i = ; i < md5Byte.Length; i++)
{
sb.Append(md5Byte[i].ToString("x2"));
}
}
return sb.ToString();
} /// <summary>
/// /*字符转化为ASCII*/
/// </summary>
/// <param name="character"></param>
/// <returns></returns>
static int CharToASCII(string character)
{
ASCIIEncoding asciiEncoding = new ASCIIEncoding();
int intAsciiCode = asciiEncoding.GetBytes(character)[];
return intAsciiCode;
}
另附上解析cookie中的skey和p_skey方法和gtk算法:
/// <summary>
/// 解析cookie,取到Skey
/// </summary>
/// <param name="cookies">腾讯QQ cookie</param>
/// <returns></returns>
public static string GetSkey(string cookies)
{
#region 字符串分割解析
//var keyStr = "skey=";
//var index = cookies.IndexOf(keyStr) + keyStr.Length;
//var skey = cookies.Remove(0, index);
//if (skey.Contains(";") && skey.Length > 10)
//{
// var laindex = cookies.IndexOf(";");
// skey = skey.Remove(10);
//}
#endregion
var skey = Regex.Match(cookies, "skey=(.){10}?").Value.Remove(, );
if (skey.Length > )
{
skey.Remove();
}
return skey;
} /// <summary>
/// 解析cookie,取到p_skey
/// </summary>
/// <param name="cookies">腾讯QQ cookie</param>
/// <returns></returns>
public static string Getp_skey(string cookies)
{
return Regex.Match(cookies, "p_skey=(.)+?_").Value.Remove(, );
} /// <summary>
/// 算出g_tk
/// </summary>
/// <param name="sKey">cookie中的sKey值</param>
/// <returns></returns>
public static string GetGTK(string sKey)
{
var hash = ;
for (int i = , len = sKey.Length; i < len; ++i)
{
hash += (hash << ) + sKey[i];
}
return (hash & 0x7fffffff).ToString();
}
腾讯QQ会员中心g_tk32算法【C#版】的更多相关文章
- C#7.2——编写安全高效的C#代码 c# 中模拟一个模式匹配及匹配值抽取 走进 LINQ 的世界 移除Excel工作表密码保护小工具含C#源代码 腾讯QQ会员中心g_tk32算法【C#版】
C#7.2——编写安全高效的C#代码 2018-11-07 18:59 by 沉睡的木木夕, 123 阅读, 0 评论, 收藏, 编辑 原文地址:https://docs.microsoft.com/ ...
- 腾讯QQ会员技术团队:人人都可以做深度学习应用:入门篇(下)
四.经典入门demo:识别手写数字(MNIST) 常规的编程入门有"Hello world"程序,而深度学习的入门程序则是MNIST,一个识别28*28像素的图片中的手写数字的程序 ...
- 腾讯QQ会员技术团队:以手机QQ会员H5加速为例,为你揭开sonic技术内幕
目前移动端越多越多的网页开始H5化,一方面可以减少安装包体积,另一方面也方便运营.但是相对于原生界面而言,H5的慢速问题一定被大家所诟病,针对这个问题,目前手Q存在几种方案,最常见的便是离线包方案,但 ...
- QQ 腾讯QQ(简称“QQ”)是腾讯公司开发的一款基于Internet的即时通信(IM)软件
QQ 编辑 腾讯QQ(简称“QQ”)是腾讯公司开发的一款基于Internet的即时通信(IM)软件.腾讯QQ支持在线聊天.视频通话.点对点断点续传文件.共享文件.网络硬盘.自定义面板.QQ邮箱等多种功 ...
- QQ会员AMS平台PHP7升级实践
作者:徐汉彬链接:https://zhuanlan.zhihu.com/p/21493018来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. QQ会员活动运营平台(AMS ...
- QUIC协议的分析,性能测试以及在QQ会员实践
WeTest 导读 你听过HTTPS.HTTP2.0.SPDY,但是这些应用层协议都是基于可靠的传输层协议TCP来实现的.那么,基于高效的UDP协议有没有一种相对可靠的应用层协议呢? Why QUIC ...
- 日请求亿级的QQ会员AMS平台PHP7升级实践
版权声明:本文由PHP7升级项目组原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/74 来源:腾云阁 https://www ...
- QQ会员活动运营平台架构设计实践——高效自动化运营
QQ会员活动运营平台(AMS),是QQ会员增值运营业务的重要载体之一,承担海量活动运营的Web系统.在过去四年的时间里,AMS日请求量从200-500万的阶段,一直增长到日请求3-5亿,最高CGI日请 ...
- 腾讯QQ团队开源分布式后台毫秒服务引擎全解析:引擎架构、RPC、灰度……
腾讯QQ团队将于12月4日开源一个服务开发运营框架,叫做毫秒服务引擎(Mass Service Engine in Cluster,MSEC),它集RPC.名字发现服务.负载均衡.业务监控.灰度发布. ...
随机推荐
- private static final long serialVersionUID = 1L这句话到底什么意思?
变量serialVersionUID称为序列化版本号,这个变量多用于实现了Serializable的类中,试用场景是类的序列化.当我们没有定义这个变量的时候,虚拟机会根据类的属性算出一个独一无二的该变 ...
- day6作业--游戏人生完善
本节作业: 熟练使用类和模块,写一个交互性强.有冲突的程序. 一.作业目的 1.规范程序写法,要按照模块来规范书写: 2.类的使用,文件之间的调用练习: 3.思路的开阔,自己编写冲突,实现调用 ...
- 【spring基础】spring与jdbc整合详解
先上一段简单示例 public class MyTemplate { private DataSource dataSource; public DataSource getDataSource() ...
- 【Java】 剑指offer(36) 二叉搜索树与双向链表
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不 ...
- HDU 2639 骨头收集者 II【01背包 】+【第K优决策】
题目链接:https://vjudge.net/contest/103424#problem/H 题目大意:与01背包模板题类似,只不过要我们求第K个最大的总价值. 解题分析: 其基本思想是将每个状态 ...
- 基于URL的高层次Java网络编程
一致资源定位器URL URL(Uniform Resource Locator)是一致资源定位器的简称,它表示Internet上某一资源的地址.通过URL我们可以访问Internet上的各种网络资源, ...
- SQL EXCEPT INTERSECT
EXCEPT是指在第一个集合中存在,但是不存在于第二个集合中的数据. INTERSECT是指在两个集合中都存在的数据. )) go )) go insert into t1 ,'t1' union a ...
- win7 资源资源管理器访问FTP站点
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\ftp] @="URL:File Transfer Protocol" ...
- C/C++指针参数赋值问题
今天遇到一个问题,即在C/C++中,关于在函数里对指针赋值的问题.首先可以看到如下现象: void test(int *p) { p = NULL; } int main(int argc, char ...
- AGC 019F.Yes or No(思路 组合)
题目链接 \(Description\) 一共有\(n+m\)道判断题,其中有\(n\)个答案为"YES",\(m\)个为"NO".现在以随机顺序给你这\(n+ ...