因无法保证各公司推送接收端口使用加密,为防止数据泄漏。推送的消息体将使用完全加密。加密方式为AES加密(AES/CTR/PKCS5Padding),加密KEY使用 appKey 生成,CTR分组模式初始向量IV由corpid(appid中包含corpid,例如appid=ww51046ddc4f4df510_NjaEnW,corpid=ww51046ddc4f4df510)生成。
为保证消息可以正常解密,消息头中将包含appId信息。接收方可以通过appId确认是否自己持有对应appKey
为方便后续推送功能调整升级,数据格式将进行版本化。消息头中将添加version头。当前版本为第1版,version: 1
与平台接口类似,消息头中同样包含timestamp信息和sign值,但与平台接口不同的是,sign值的计算由 appId+version+timestamp+appKey计算得到,消息体不参与sign计算。接收方可以通过这个sign值确定是否由我平台推送的消息,而不必花费算力进行消息体解密。
消息体解密后为 JSON格式。该JSON具有统一的外层构架结构
1.
取当前系统时间戳 timestamp。本示例假设时间戳为1596681164807
2.
联接appId、version、timestamp、appKey,并对结果做SHA256计算摘要值,以16进制编码表示,作为sign值。本例结果为317672b4685d9b8bafe1794390e31209aed5cef912683292fed94a69085919d3
6.
使用第3步得到的密钥和第4步得到的IV对第5步中得到的字节数据做AES/CTR/PKCS5Padding加密,得到加密后字节数据
7.
将第6步得到的字节数据按Base64编码,得到Base64编码字符串,即加密后用于传输的数据。本示例结果为: