签名验证
构造验签名串
首先,商户先从应答中获取以下信息。
HTTP 头 Timestamp 中的应答时间戳。
HTTP 头 Nonce 中的应答随机串。
应答主体(response Body),需要按照接口返回的顺序进行验签,错误的顺序将导致验签失败。
签名串一共有三行,每一行为一个参数。行尾以 \n
(换行符,ASCII 编码值为 0x0A)结束,最后一行不用加\n
。如果参数本身以 \n
结束,也需要附加一个\n
。
应答时间戳\n
应答随机串\n
应答报文主体
如某个应答的 HTTP 报文为:
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 02 Apr 2019 12:59:40 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 2204
Connection: keep-alive
Keep-Alive: timeout=8
Content-Language: zh-CN
TTPay-Nonce: c5ac7061fccab6bf3e254dcf98995b8c
TTPay-Signature: CtcbzwtQjN8rnOXItEBJ5aQFSnIXESeV28Pr2YEmf9wsDQ8Nx25ytW6FXBCAFdrr0mgqngX3AD9gNzjnNHzSGTPBSsaEkIfhPF4b8YRRTpny88tNLyprXA0GU5ID3DkZHpjFkX1hAp/D0fva2GKjGRLtvYbtUk/OLYqFuzbjt3yOBzJSKQqJsvbXILffgAmX4pKql+Ln+6UPvSCeKwznvtPaEx+9nMBmKu7Wpbqm/+2ksc0XwjD+xlvlECkCxfD/OJ4gN3IurE0fpjxIkvHDiinQmk51BI7zQD8k1znU7r/spPqB+vZjc5ep6DC5wZUpFu5vJ8MoNKjCu8wnzyCFdA==
TTPay-Timestamp: 1554209980
Cache-Control: no-cache, must-revalidate
{"app_id":"xxxx"}
则验签名串为
1554209980
c5ac7061fccab6bf3e254dcf98995b8c
{"app_id":"xxxx"}
获取应答签名
我们 的应答签名通过 HTTP 头 Signature 传递。(注意,示例因为排版可能存在换行,实际数据应在一行)
CtcbzwtQjN8rnOXItEBJ5aQFSnIXESeV28Pr2YEmf9wsDQ8Nx25ytW6FXBCAFdrr0mgqngX3AD9gNzjnNHzSGTPBSsaEkIfhPF4b8YRRTpny88tNLyprXA0GU5ID3DkZHpjFkX1hAp/D0fva2GKjGRLtvYbtUk/OLYqFuzbjt3yOBzJSKQqJsvbXILffgAmX4pKql+Ln+6UPvSCeKwznvtPaEx+9nMBmKu7Wpbqm/+2ksc0XwjD+xlvlECkCxfD/OJ4gN3IurE0fpjxIkvHDiinQmk51BI7zQD8k1znU7r/spPqB+vZjc5ep6DC5wZUpFu5vJ8MoNKjCu8wnzyCFdA==
判断签名
使用AES-256-ECB
的方法生成签名(可参考签名生成)。生成后的签名跟应答签名做对比。不一致则表示数据遭到篡改。
Last updated