Appearance
签名校验
何时需要签名
当后台「传输配置 → 校验配置 → 签名校验」设为 请求签名 或 双向签名 时,所有请求必须携带 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_KEY、imei=DEVICE_001、t=1741700000、safe_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 本身也需要经过加密编码后再传输。