既然应用已经验证在与正确的服务器通信并已被成功认证, 那么用户就可以开始发出服务请求了。 应用必须确保传输的数据在传输过程中是安全且未被修改的。
资金转移请求会联合使用密码哈希与加密的方式来确保消息是难以理解的并且在传输阶段是没有经过修改的。 虽然本节将会生成和介绍很多负载示例, 不过每个示例都会使用如下代码定义的 JSON 负载结构:
JSON
payload 属性是请求体中唯一被加密的元素。 服务层要想正确解密负载, 就得要求应用使用 Initialization Vector(IV) 来对数据进行加密。 通常情况下, IV 会随着被它加密的数据一起发送。 虽然这么做似乎降低了消息的安全性, 但实际上并不会, 因为单凭 IV 本身不足以解密消息。 当服务层解密负载后, 它会使用同样的预定义的负载属性集合来生成 MAC(消息认证码, Message Authentication Code), 然后将其与进来的请求中的 MAC 进行对比以验证消息的完整性。 如果消息在传输过程中被修改, 那么代码就不会匹配, 被修改的消息则会产生错误
图 6-2 概览了请求、响应交易中发生的步骤, 以及在交易每一端的加密与解密过程中使用的组件。 交易双方都知道用于加密与解密的重要值和 MAC 算法。 此外, 请求体部分与之前示例中定义的 JSON 负载结构是匹配的
请求、响应中的加密与解密过程