Skip to content

签名校验

何时需要签名

当后台「传输配置 → 校验配置 → 签名校验」设为 请求签名双向签名 时,所有请求必须携带 s 参数。

签名的作用

签名用于防止请求参数被中间人篡改。服务器收到请求后,会使用相同的算法重新计算签名,与客户端传入的 s 比对。

签名计算步骤

按以下 4 步计算签名值:


① 拼接参数

将所有请求参数(排除 s 参数自身)按发送顺序拼接为查询字符串格式:

key1=value1&key2=value2&key3=value3&...

② 追加 APPKEY

在拼接结果 末尾 追加 &{APPKEY}

key1=value1&key2=value2&...&{APPKEY}

③ 计算 MD5

对拼接结果取 MD5 哈希(32 位小写十六进制)。

④ 得到签名

MD5 值即为签名 s 的值。


签名计算示例

点击展开完整示例

假设配置

  • APPKEY:e10adc3949ba59abbe56e057f20f883e
  • 请求参数:kami=TEST_KEYimei=DEVICE_001t=1741700000safe_code=hello

拼接原文(排除 s):

kami=TEST_KEY&imei=DEVICE_001&t=1741700000&safe_code=hello&e10adc3949ba59abbe56e057f20f883e

签名值

s = md5("kami=TEST_KEY&imei=DEVICE_001&t=1741700000&safe_code=hello&e10adc3949ba59abbe56e057f20f883e")

加密场景下的签名计算

如果开启了「请求值加密」,签名计算使用的是 加密后编码后 的参数值,而不是明文。

流程:先加密参数值 → 按编码配置编码 → 用编码后的值拼接 → 计算签名。

伪代码

python
# 1. 准备参数(如开启了请求值加密,这里用加密编码后的值)
params = {
    "kami": "加密后的单码卡密值",
    "imei": "加密后的机器码值",
    "t":    "加密后的时间戳值",
    "safe_code": "加密后的验证码值"
}

# 2. 拼接签名原文
sign_str = ""
for key, value in params:
    sign_str += key + "=" + value + "&"
sign_str += APPKEY    # 末尾拼接APPKEY

# 3. 计算签名
s = md5(sign_str)

# 4. 将签名加入请求(如开启了请求值加密,s 值也需要加密编码)
params["s"] = encrypt_and_encode(s)  # 或者直接 s(若未开启加密)

提示

签名参数 s 在计算完成后,如果开启了请求值加密,s 本身也需要经过加密编码后再传输。

T3 网络验证 WebAPI 开发文档