HERE TRAFFIC TPEG API getmessage接口加密规则相关问题咨询
HERE TRAFFIC TPEG API加密适配疑问解答
待处理请求XML
<?xml version="1.0" encoding="UTF-8" ?> <get-messages> <locations> <loc lat="52.55121" lon="13.16565"/> </locations> </get-messages>
官方加密压缩流程回顾
- 使用gzip压缩XML body
- 计算gzip压缩后数据的字节长度
- 将gzip压缩数据的长度以小端32位整数格式附加到压缩数据体的最前面
- 对上述长度+gzip内容的组合数据补零,使得总长度可被16字节整除
- 使用AES 128对步骤4得到的补零后数据进行加密:
- 生成一个16字节长度的随机整数
- 采用CBC模式执行AES加密,以上述随机整数作为初始化向量,以
InitSession接口返回的内容作为密钥,加密过程不额外添加填充
- 将步骤5得到的AES加密数据块前附加步骤5a生成的初始化向量,作为HTTP POST请求的body,
Content-Type设置为application/octet-stream,请求到InitSession返回的接口地址即可
疑问解答
- 问题1:gzip压缩后的XML输出格式要求是Base64还是二进制?
答:直接取gzip压缩后的原始二进制字节流即可,不需要做Base64编码。 - 问题2:32位小端整数的格式要求是二进制吗?
答:是的,需要将长度值转换为4字节的小端二进制值,直接拼接在gzip二进制流头部,不要转为字符串或十六进制文本。 - 问题3:从
InitSession获取的密钥长度为32字符,而AES128要求密钥长度为16字节,是否需要将该密钥按十六进制值解析?所有涉及的数值都需要定义为十六进制值吗?
答:需要将32字符的密钥按十六进制规则解析为16字节的二进制密钥(2个十六进制字符对应1字节)。除该密钥外,其他流程涉及的数值都直接按原始二进制处理即可,不需要额外转为十六进制。 - 问题4:初始化向量的格式要求是十六进制、文本还是二进制?
答:初始化向量要求是16字节的原始二进制数据,生成后直接以二进制形式使用,无需转为十六进制或Base64文本。 - 问题5:最终加密结果的格式要求是十六进制、二进制、文本还是Base64?
答:最终请求体为二进制格式,直接将16字节的IV二进制流拼接在AES加密后的二进制密文前即可,不需要做任何编码转换。
内容的提问来源于stack exchange,提问作者Yesyoor
相关产品推荐
相关产品推荐

