我正在阅读 zip 文件规范,但没有解释存档中文件的加密标头是如何构造的。标题顺序是这样的:
[本地文件头1] [加密头1] [文件数据1] [数据描述符1]
在本地文件头之后,规范说明以下内容,同时跳过加密头部分:
紧跟在文件的本地标头之后 应放置文件的压缩或存储数据。 如果文件已加密,则文件的加密标头 应放置在本地标头之后、文件之前 数据。 【本地文件头】【加密头】系列 [文件数据][数据描述符]对每个文件重复 .ZIP 存档。
我正在寻找这个加密标头的结构,因为这个规范没有解释它。有谁知道这是如何工作的吗?
6.1 传统PKWARE解密
...
6.1.3 每个加密文件在开头都存储了额外的 12 个字节 定义该文件的加密标头的数据区域。这 加密头最初设置为随机值,然后 本身使用三个 32 位密钥进行加密。关键值是 使用提供的加密密码进行初始化。每个字节之后 被加密,然后使用伪随机数更新密钥 与相同 CRC-32 算法相结合的生成技术 在 PKZIP 中使用并在本文档的其他地方进行了描述。
...
解密标头的规范取决于所使用的加密算法。有一个传统 PKWARE 加密(标准),但它已经过时,因此应使用自定义加密/解密。
RAR 5.0 archive format
看起来不错的文档,位于 https://www.rarlab.com/technote.htm
您可能会发现它对项目很有帮助
sharpcompress
:
https://github.com/adamhathcock/sharpcompress/tree/master/src/SharpCompress/Common/Zip
以下是 6.3.5 版本规范的链接。 zip 版本 6.3.5 规范.
第7.2.4节解密压缩文件数据之前的头记录
Archive Decryption header 和 Decryption header 类似。
我没看到哪里提到Decryption header的签名。
第 4.2.1 节 每条记录必须有以“PK”开头的签名。