结算价格解析方法¶
DSP 获取到的结算价格,是经过加 密后的结算价格,每个 DSP 有一个唯一的结算价格解密密钥, 请联系 Zplay Adx 团队获取,并妥善保管。
约束变量¶
| 字段 | 含义 |
|---|---|
| Psettle | 原始价格 |
| Pencrpt | 加密的价格 |
| d_key | 解密密匙,32字节 |
| i_key | 完整性密匙,32字节 |
| time_stamp | 时间戳 |
| integrity | 完整性签名 |
| side_word | 价格加密干扰码,8字节 |
| + | 字符串连接 |
| ^ | 异或 |
| WebSafeBase64Encode() | 标准base64 编码(RFC2045),替换“+”为“-”;“/”为“_”,会省略填补的字符 |
| WebSafeBase64Decode() | 标准base64 编码(RFC2045),需要替换“-”为“+”;“_”为“/”,并填补占位符 |
| Eenc | 加密后的密文 |
| Esrc | 原始密文 |
解密步骤:¶
原始密文Esrc 右端补齐’=’ 直到字符串长度为4的倍数为止
用WebSafeBase64Decode解码该字符串,结果应为长度16字节的数据 数据格式如下:
time_stamp(4) | P:sub:`encrpt`(8) | integrity(4)其中time_stamp 为小字节字序的int32 值,是加密价格时的unix time stamp。使用秘钥d_key对time_stamp, 进行如下操作
mac = hmac.New(sha1.New, d_key)mac.Write(time_stamp)side_word = mac.Sum(nil)[:8]将Pencrpt 与side_word进行按字节异或操作, 得到值既为Psettle , 是小字节字序的float64值, 单位为分
校验步骤¶
将Psettle 与time_stamp按小字节字序合并为12字节的数据, 用i_key进行如下操作
mac = hmac.New(sha1.New, i_key)mac.Write(Psettle + time_stamp) (并不是数字的相加,而是合并为12字节的数据)result = mac.Sum(nil)[:4]将上一步骤得出的结果,与integrity进行比较, 相等表示校验成功,否则失败。