自2000年代中期以来,办公文档(如2005年发布的 OpenOffice.org 2.0)已经被设计为一种包含文档内容的归档文件。在下图中,可以看到一个 Word 文档的结构。
从上图可以发现,这个归档文件中的所有结构是相互关联的,而这种关系是从末端开始的。
在归档文件的末尾,有一个名为中央目录记录结束标记(EOCD)的结构。该结构包含关于中央目录文件头(CDFH)大小、其偏移量以及归档文件中条目总数的信息。通过这个结构,可以定位到 CDFH。
(1)本地文件头(LFH)
位置: 位于ZIP文件的开头。
内容: 包含文件名、文件大小、CRC32校验值等信息。每个文件在ZIP文件中的数据块都从LFH开始。
作用: 描述单个文件的基本信息。
与其他部分关系: 在中央目录记录中,每个文件条目会引用它的起始偏移量
(2)中央目录文件头(CDFH)
位置: 通常在ZIP文件数据块之后,用于汇总所有文件的基本信息。
内容: 包含扩展的文件信息(如文件名、相对于LFH的偏移量); 每个文件在中央目录中都有对应的条目,条目中记录了该文件的偏移地址和属性。
(3)中央目录结束记录(EOCD)
位置: 位于ZIP文件的末尾。
内容: 包含中央目录的偏移量、大小、文件总数等信息。
作用: 作为ZIP文件的索引起点,帮助解析中央目录和LFH。
与CDFH关系: 通过偏移量定位中央目录起始位置,从而间接定位所有文件的LFH。