MD5 签名 + 时间戳防重放,保障接口调用安全
所有接口响应(以及部分请求)都会附加一个 sign 参数,用于验证数据完整性。签名算法如下:
sign = md5("原始返回内容" + 签名密钥)
其中 签名密钥 是在卡密通后台为每个应用分配的 signKey,请妥善保管,切勿泄露。
假设服务器返回的原始内容(不含 |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"
返回内容中包含一个 Unix 时间戳(例如上面的 1734567890),客户端在验证签名通过后,必须 检查该时间戳与本地时间的差值:
此机制可有效防止攻击者截获合法响应后重复使用。
提示: 签名密钥和时间戳的具体值请以后台配置为准。不同应用的密钥互不相同,请确保代码中使用正确的密钥。
|sign=xxx)。|sign= 之前的部分作为 原始内容,同时提取签名值。