我现在挣扎了一整周,未能满足 HERE 流量 api 的加密要求,确切地说是 TPEG API。
要做的步骤:
<?xml version="1.0" encoding="UTF-8" ?>
<get-messages>
<locations>
<loc lat="52.55121" lon="13.16565"/>
</locations>
</get-messages>
此 xml 正文必须加密,HERE API 记录如下:
加密和压缩所有流量信息请求:
使用 gzip 压缩 XML 正文。
计算 gzip 文件的字节长度。
将 gzipped 数据的长度作为一个 little endian 32 位整数添加到压缩正文中。
用零填充 gziped 内容和长度的组合,使其可被 16 个字节整除。
使用 AES 128,加密内容和长度的填充组合,如下所示: a) 创建一个 16 字节长的随机整数。b) AES 加密步骤 4 的结果,在 CBC 模式下,使用步骤 5.a 中生成的整数作为初始化向量和来自 InitSession 响应的密钥。不要应用额外的填充。
将生成的 AES 加密数据块作为 HTTP POST 请求发送,在步骤 5.a 中生成的整数作为内容类型 application/octet-stream 前置到 initsession 响应中的 URL
这么多东西在这里不清楚,gziped xml 的期望结果是什么?Base64?二进制?32 little endian int, binary 的类型是什么?
密钥长度为 32 个字符。由于 AES128 只适合 16 字节长的密钥,我假设密钥必须被解释为十六进制值。是否所有值都需要定义为十六进制值?
IV的类型是什么?十六进制?文本?二进制?加密结果的类型是什么?十六进制?二进制?文本?Base64?
http 标头必须包含 content_type appilcation/octet-stream。