加密表以数据页为加密对象,以AES_BLOCK大小为加密单元。
以只有AES加密的表为例,假设页数据有n个完整的AES_BLOCK大小(在图中以n个描述)和一个不足AES_BLOCK大小的数据组成,即真实数据大小为n*AES_BLOCK<data_len<(n+1)*AES_BLOCK
流程如下所示:
加密:
1. 读取前两个字节(页类型)。
2. 根据加密类型进行加密,只加密data和trailer。
3. 根据加密类型计算需要加密的数据长度,AES加密要减去38个file header长度。
4. 加密数据大小须为加密块大小的倍数,先对数据前加密块大小整数倍加密(chunk)。
5. 取尾部2个加密块大小进行加密,尾部2个加密块大小包含了剩余数据(remain)和页尾(trailer),极有可能还包含了与上一步重叠的加密数据。
解密:
解密是加密的逆过程
1.读取前两个字节(页类型)。
2.根据页类型加密类型跳过file header长度 得到加密数据。
3.先将最后两个加密块解密,再对前面的数据进行解密。