zoukankan      html  css  js  c++  java
  • QQ登录底层原理分析(转)

    *************** 下面正式开始。 其实简单说,QQ登录分为四步: 一,客户端向服务器发送请求登录令牌;二,服务器返回登录令牌;三,客户端登录;四,服务器返回结果。 下面一一分析。 ****************** 一,客户端请求登录。此步骤是最简单的一步。客户端向服务器发送一个登录请求包,内容如下: ********* 头部 0x00 尾部 ********* 其中头部为固定格式,如下: ********* 0x02 客户端版本 命令 序列号 QQ号码 ********* 命令为请求登录或登录等。序列号是一个随机数,客户端每次加一,用以确定回应包与请求包是否一一对应。 ****************** 二,如果服务器确认可以在此登录,则返回一个登录包,如下: ********* 头部 回复码 登录令牌长度 登录令牌 尾部 ********* 其中回复码表示是否可以在该服务器登录,登录令牌长度为一固定值。登录令牌由服务器生成,未知含意。 ****************** 三,客户端登录。最重要的一步,登录包如下: ********* 头部 初始密钥 用户密码加密一个空串得到的16字节 固定内容,未知 登录状态(在线、隐身) 固定内容,未知 登录令牌长度 登录令牌 登录模式 未知 未知 固定内容,未知 补足0到规定长度 尾部 ********* 其中初始密钥是一个16字节的随机数,用于本身加密。下文详解。 ****************** 四,服务器返回包。如果一切正确,服务器将返回一个登录包。 ********* 头部 回复码 会话密钥 QQ号 用户IP 用户端口 服务器IP 服务器端口 登录时间 未知一堆 CLINET KEY 上次登录IP 上次登录时间 未知 尾部 ********* 同样,这个返回包也是用密码密钥加密的。         在第三步中,用户密码将被两次MD5加密,然后作为密钥。再用它来加密一个空字符串,使用的是TEA算法。加密结果放在包里。而整个包除初始密钥外均是用初始密钥加密的。 服务器收到登录包后,用初始密码解开登录包。然后用服务器上的密码来解开密码密钥加密的空字符串。如果成功,则说明密码正确。登录成功。
  • 相关阅读:
    ubuntu进入可视化界面
    MYSQL(一)
    PHP(一)
    MAC下安装NLTK
    初次使用NLTK
    iPhone项目的BaseSDK和DeploymentTarget
    ratelimit+redis+lua对接口限流
    java操作RabbitMq
    二维码生成并在下方添加文字,打包下载
    Redis六大淘汰策略:新来的员工不小心把Redis服务器撑爆了!!!
  • 原文地址:https://www.cnblogs.com/adodo1/p/4327140.html
Copyright © 2011-2022 走看看