MTF 支持除了 填充,Set Map,文件/目录 细节流外的其它流的加密。 为了启用压缩,备份集内的所有 DBLK 需要设置 MTF_DB_HDR 的块属性的 MTF_ENCRYPTION 比特。 每个备份集只能使用一种加密算法。
为了加密流数据,流头必须设置流媒介格式字段的 STREAM_ENCRYPTED 比特, 以及设置数据加密算法字段。 当一个流头设置为启用加密,所有的流数据必须被一个加密帧流头封装。
当一个流同时以数据压缩和数据加密写进去,数据会压缩然后加密。 因此,当读取一个即压缩又加密的流,数据需要先解密然后解压。
注意:当流数据同时压缩和加密时,压缩帧头被加密,因为它是流数据。
加密帧头用于封装加密流数据以及提供解密需要的所有信息。 它必须提供当前加密帧头所有未加密时数据的字节数。
偏移 | 字段名 | 类型 | 大小 |
---|---|---|---|
0 00h | 加密头 ID | UINT16 | 2 字节 |
2 02h | 流媒介格式属性 | UINT16 | 2 字节 |
4 04h | 剩余的流大小 | UINT64 | 8 字节 |
12 0Ch | 未加密大小 | UINT32 | 4 字节 |
16 10h | 加密大小 | UINT32 | 4 字节 |
20 15h | 序号 | UINT8 | 1 字节 |
21 16h | 预留 | - - - | 1 字节 |
22 17h | 校验 | UINT16 | 2 字节 |
加密头 ID 字段标识这是一个加密帧头的开始。 加密头 ID 字段包含一个 2 字的 ASCII 签名 'EH' (0x4845)。
流媒介格式属性字段包含了加密之前的流头的原始的流媒介格式属性。 解压后,流媒介属性字段的 STREAM_VARIABLE 比特可以用于模仿原始的流状态。
剩余的流大小字段在第一个加密帧头包含了未加密的流长度。 在接下来的加密帧头这个字段通过上一个加密帧头的剩余的流大小字段 减去上一个加密帧头的未加密大小得到。 如果总的未加密流长度无效,这个字段设为 0。
未加密大小字段包含了本加密帧头封装的未加密时的数据大小。
加密大小字段本加密帧头封装的加密后的数据大小。
第一个加密帧头的序号字段从 1 开始,在接下来的每个加密帧头加 1。 由于序号字段是 1 字节大小,序号会在每 256 帧回环。
校验字段包含了对所有字段进行按字进行 XOR 操作的总和。 不包括 2 字节的校验字段本身。 这个字段用于在读操作时验证这是一个合法的加密帧头。