腾讯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.名字发现服务.负载均衡.业务监控.灰度发布. ...
随机推荐
- Springboot 2.0 - 集成redis
序 最近在入门SpringBoot,然后在感慨 SpringBoot较于Spring真的方便多时,顺便记录下自己在集成redis时的一些想法. 1.从springboot官网查看redis的依赖包 & ...
- css盒子模型和定位
content padding border margin 可以理解为在商场上看到的电视机. 电视机------content 装电视机的箱子边框有粗细------border 电视机与箱子之间的泡沫 ...
- coalesce :返回参数(列名)中第一个非NULL值的字段值
示例 下面的语句返回值 34.(只返回一个值就算后面不为NULL也直接丢弃) SELECT COALESCE( NULL, 34, 13, 0 ) 备注 如果所有参数均为 NULL,则 COALESC ...
- 005.Docker存储管理
一 Docker volume形态 因为Docker 采用 AFUS 分层文件系统时,文件系统的改动都是发生在最上面的容器层,在容器的生命周期内,它是持续的,包括容器在被停止后.但是,当容器被删除后, ...
- 附002.Docker常见命令
# docker --help Usage: docker [OPTIONS] COMMAND [arg...] docker daemon [ --help | ... ] docker [ -h ...
- Leaf:美团分布式ID生成服务开源
Leaf是美团基础研发平台推出的一个分布式ID生成服务,名字取自德国哲学家.数学家莱布尼茨的一句话:“There are no two identical leaves in the world.”L ...
- AM335x启动
参考文件: 1.TI.Reference_Manual_1.pdf http://pan.baidu.com/s/1c1BJNtm 2.TI_AM335X.pdf http://pan.baidu.c ...
- 使用Future停止超时任务
今天学了下多线程中超时任务的处理,这里和大家分享下,遇到了点问题没能解决,留下来希望大家帮我解疑啊. 在JAVA中停止线程的方法有多种,有一种是结合ExecutorService和Future的使用, ...
- IdentityServer4-主题
一.Startup 二.定义Resources 三.定义Clients 四.登录 五.使用外部身份提供商登录 六.Windows身份验证 七.登出 八.注销外部身份提供商 九.联合注销 十.联合网关 ...
- Python学习——web框架
对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. WSGI(Web Server Gateway Interface)是一种规范,它定义了使用p ...