安全机制

签名机制说明

MD5 签名 + 时间戳防重放,保障接口调用安全

卡密通验证接口采用签名机制防止数据伪造和重放攻击。本文档详细说明签名算法、计算示例及时间戳校验规则。

1. 签名算法

所有接口响应(以及部分请求)都会附加一个 sign 参数,用于验证数据完整性。签名算法如下:

sign = md5("原始返回内容" + 签名密钥)

其中 签名密钥 是在卡密通后台为每个应用分配的 signKey,请妥善保管,切勿泄露。

2. 计算示例

假设服务器返回的原始内容(不含 |sign=xxx 部分)为:

"ok|valid|1|60|1734567890"

应用的签名密钥为:

"keyt@2026"

拼接后的字符串为:

"ok|valid|1|60|1734567890keyt@2026"

计算该字符串的 MD5 值(32位小写)即为签名。假设 MD5 结果为:

"a1b2c3d4e5f67890abcdef1234567890"

最终返回的完整响应应为:

"ok|valid|1|60|1734567890|sign=a1b2c3d4e5f67890abcdef1234567890"

3. 时间戳防重放机制

返回内容中包含一个 Unix 时间戳(例如上面的 1734567890),客户端在验证签名通过后,必须 检查该时间戳与本地时间的差值:

  • 差值 ≤ 120 秒:视为有效响应,允许处理业务数据。
  • 差值 > 120 秒:视为过期或重放攻击,应拒绝本次响应。

此机制可有效防止攻击者截获合法响应后重复使用。

提示: 签名密钥和时间戳的具体值请以后台配置为准。不同应用的密钥互不相同,请确保代码中使用正确的密钥。

4. 验证流程总结

  1. 接收服务器返回的字符串(含 |sign=xxx)。
  2. 提取 |sign= 之前的部分作为 原始内容,同时提取签名值。
  3. 使用本地密钥拼接原始内容,计算 MD5。
  4. 比对计算出的 MD5 与提取的签名值是否一致。
  5. 若一致,再提取原始内容中的时间戳,判断与本地时间差值是否 ≤ 120 秒。
  6. 若全部通过,则解析业务数据(如授权状态、剩余天数等)。