T3网络验证V3
    T3网络验证V3
    • 概述和快速开始
    • 加密和签名算法
    • 通用参数和错误码
    • 单码卡密登录
    • 单码卡密心跳验证
    • 单码卡密解绑机器码
    • 通过单码卡密获取云端变量
    • 获取程序版本信息
    • 获取程序公告

    加密和签名算法

    T3网络验证 V3 API - 加密和签名算法#

    加密通信流程#

    V3 API 使用RSA非对称加密保护通信安全,SDK会自动处理所有加密和解密操作。

    明文模式(开发调试)#

    请求流程:
    JSON对象 → POST发送
    响应流程:
    接收 → JSON对象

    RSA加密模式(生产环境)#

    请求加密流程#

    步骤1:构建JSON对象
       ↓
    步骤2:转换为JSON字符串
       ↓
    步骤3:RSA加密(使用公钥)
       ↓
    步骤4:Base64编码
       ↓
    步骤5:POST发送到服务器
    示例代码(伪代码):

    响应解密流程#

    步骤1:接收响应数据
       ↓
    步骤2:二进制解码(如果开启BinaryResponse)
       ↓
    步骤3:Base64解码
       ↓
    步骤4:RSA解密(使用公钥)
       ↓
    步骤5:解析JSON对象
       ↓
    步骤6:解密data字段(如果开启DataEncrypt)
       ↓
    步骤7:验证签名(如果开启SignMode)
       ↓
    步骤8:返回业务数据
    示例代码(伪代码):

    签名算法详解#

    请求签名生成#

    用途: 验证请求来源和数据完整性
    算法步骤:
    步骤1:收集所有参数(排除sign自身)
    params = {
        "card_code": "ABC123",
        "device_code": "DEVICE_001",
        "timestamp": 1699999999
    }
    
    步骤2:按key字母顺序排序
    sortedKeys = ["card_code", "device_code", "timestamp"]
    
    步骤3:拼接签名字符串
    signString = "card_code=ABC123&device_code=DEVICE_001&timestamp=1699999999&key=" + AppKey
    
    步骤4:MD5计算签名(32位小写)
    sign = MD5(signString)
    // 结果示例:abc123def456789...
    
    步骤5:添加sign到请求参数
    params["sign"] = sign
    签名规则:
    参数按key字母顺序排序
    空值参数不参与签名
    sign参数本身不参与计算
    最后追加 key=AppKey
    使用MD5计算,32位小写
    代码示例:

    响应签名验证#

    用途: 验证响应未被篡改

    Sign1验证(单向签名,SignMode=1)#

    算法:
    signString = "data=" + response.data + 
                 "&nonce=" + response.nonce + 
                 "&timestamp=" + response.timestamp + 
                 "&key=" + AppKey
    
    calculatedSign = MD5(signString)
    
    验证: calculatedSign == response.sign
    示例:

    Sign2验证(双向签名,SignMode=2)#

    算法:
    signString = "data=" + response.data + 
                 "&" + 请求参数(排除sign和timestamp) +
                 "&nonce=" + response.nonce + 
                 "&timestamp=" + response.timestamp + 
                 "&key=" + AppKey
    
    calculatedSign2 = MD5(signString)
    
    验证: calculatedSign2 == response.sign2
    特殊规则:
    请求参数中的 sign 不参与sign2计算
    请求参数中的 timestamp 不参与sign2计算(使用响应的timestamp)
    如果data被加密,使用加密后的字符串参与签名
    示例:

    RSA加密说明#

    加密参数#

    算法: RSA-1024
    填充方式: PKCS1_PADDING
    编码方式: Base64

    密钥说明#

    公钥: 客户端使用,用于加密请求和解密响应
    私钥: 服务器使用,用于解密请求和加密响应
    密钥长度: 1024位(128字节)

    注意事项#

    公钥和私钥成对生成
    私钥仅存储在服务器端,不要泄露
    公钥在客户端SDK中配置
    V3使用独立的RSA密钥,不与旧版共用

    二进制响应模式#

    功能说明#

    在RSA加密基础上增加一层二进制混淆,防止封包被轻易查看和篡改。

    魔术头#

    响应数据以魔术头开头:T3网络验证https://www.t3yanzheng.com

    解码流程#

    1. 验证魔术头(约42字节)
    2. XOR解混淆(使用AppKey的MD5作为密钥)
    3. 得到加密数据
    4. 继续RSA解密流程

    抓包效果#

    开启前:
    aGVsbG8gd29ybGQ=(可读的base64)
    开启后:
    T3网络验证https://www.t3yanzheng.com�@oS-.N38\�C+�P{�!)...(乱码)

    SDK自动处理#

    重要提示
    SDK已自动处理所有加密、解密、签名验证操作,你只需要:
    1.
    正确配置 T3Config.h
    2.
    调用简单的API方法
    3.
    处理返回的业务数据
    无需手动处理加密、签名等底层细节。
    修改于 2025-11-10 21:00:45
    上一页
    概述和快速开始
    下一页
    通用参数和错误码
    Built with