key 为 DEMO_KEY_DO_NOT_SEND)。| 项 | 值 |
|---|---|
| aesKey | 0123456789abcdef0123456789abcdef |
| secret | demo_secret_do_not_use_0000000000000000000000000000000000000000(63 个字符,仅为演示;正式 secret 为 64 个字符,实现中不要校验 secret 长度) |
| timestamp | 1794370000000 |
| 业务参数(明文) | {"orderNo":"SO202611110001"} |
aesKey 的 32 个字节,IV 为 0123456789abcdef 这 16 个字节:密钥(32 字节) 3031323334353637383961626364656630313233343536373839616263646566
IV(16 字节) 30313233343536373839616263646566
明文(28 字节) 7B226F726465724E6F223A22534F323032363131313130303031227D
填充后(32 字节) 7B226F726465724E6F223A22534F323032363131313130303031227D04040404
密文(32 字节) E37118455BD7F25C6A2FAAD1FD767E88148D82CA2CD071D7F09515409B030E19
body(44 个字符) 43EYRVvX8lxqL6rR/XZ+iBSNgsos0HHX8JUVQJsDDhk=body 同时含 +、/、=,可以用来检查 Base64 字母表、填充和 URL 编码问题(见请求与加密的「Base64 变体与 URL 编码」)。它只有 44 个字符,不会触发换行;换行问题用第五步的 88 字符向量检查。43EYRVvX8lxqL6rR/XZ+iBSNgsos0HHX8JUVQJsDDhk=1794370000000demo_secret_do_not_use_0000000000000000000000000000000000000000sign = 6D1F10D8A10FB9580628DA5C4C00E1CD{ 开头时用同一个 aesKey 解密,得到统一响应 JSON。下面的响应密文可用来自测解密,结果含中文,可同时检查 UTF-8 解码:响应体(88 个字符) eSsA+X75kefBUTb/yembJ6a8+mxk87202MXBC38kzIGz4NhL+repxbzV2gaEXHJkPr1KY2HtnDYJHVT1nfFzgA==
密文(64 字节) 792B00F97EF991E7C15136FFC9E99B27A6BCFA6C64F3BDB4D8C5C10B7F24CC81B3E0D84BFAB7A9C5BCD5DA06845C72643EBD4A6361ED9C36091D54F59DF17380
去填充后(60 字节) 7B22636F6465223A323031302C226D7367223A22E8AEA2E58D95E4B88DE5AD98E59CA8222C2264617461223A6E756C6C2C226F6B223A66616C73657D
明文 {"code":2010,"msg":"订单不存在","data":null,"ok":false}-K 是 aesKey 的十六进制,-iv 是其前 16 字节的十六进制,-A 表示 Base64 不换行;解密时加 -d):aesKey、同一 IV),结果必须正好是第五步那 88 个字符的响应体。body、第三步的 sign、自测判据第 2 条的响应体,以及 body 解密后的明文。pip install pycryptodome requests)