我想保护结构化数据

Tink API 将任意二进制 blob 作为输入。这意味着,如果您希望 对结构化数据(如 协议缓冲区,您需要 先对数据进行编码。

加密 protobuf

加密方法如下:

  1. 将 protobuf 序列化为字节数组。
  2. 加密序列化字节,然后存储或发送生成的密文。 请使用: <ph type="x-smartling-placeholder">

如需解密,请执行以下操作:

  1. 解密密文。
  2. 如果第 1 步成功完成,则对 protobuf 进行反序列化。

保护 protobuf 免遭篡改

在大多数情况下,加密 protobuf 比单独进行身份验证要好。

如需防止 protobuf 被篡改,请执行以下操作:

  1. 将 protobuf 序列化为字节数组。
  2. 对序列化字节进行签名或身份验证。请使用: <ph type="x-smartling-placeholder">
  3. 将序列化字节与签名(或 MAC)一起存储。

如需进行验证,请执行以下操作:

  1. 获取序列化 protobuf 及其签名(或 MAC)。
  2. 验证签名(或 MAC)。
  3. 反序列化 protobuf。

请注意,有效的签名或 MAC 并不能保证数据正确无误 格式。解析数据的实现应始终预期 可能已损坏。

保护多个数据项

如需保护多个数据项,请使用序列化方法。添加所有数据 传输至 protobuf,并按照上述方法对其进行加密(或身份验证)。

您还可以按如下方式进行序列化:

serialize(data1 , data2 , …, datan) = 4-byte-data1's length || data1 || 4-byte-data2's length || data2 || … || 4-byte-dataN's length || dataN

最后,对生成的字节数组进行加密(或身份验证)。