受密码保护的ZIP文件的字节签名是什么?

时间:2009-09-28 23:30:22

标签: binary zip byte binaryfiles zipfile

我已经读过ZIP文件以下列字节开头:

50 4B 03 04

参考:http://www.garykessler.net/library/file_sigs.html

问题:是否有一定的字节序列表明ZIP文件已受密码保护?

3 个答案:

答案 0 :(得分:8)

ZIP文件必须以

开头
50 4B 03 04
zip文件中的

条目50 4B 03 04...开头..通常,纯zip文件以zip条目开头,作为文件中的第一件事。但是,并不要求zip文件以这些字节开头。所有以这些字节开头的文件都是可能 zip文件,但并非所有zip文件都以这些字节开头。

例如,您可以创建一个自解压存档,它是一个PE-COFF文件,一个常规EXE,其中实际上 是该文件的签名,即{{1} }。然后,在exe文件的后面,您可以存储从4D 5A ...开始的zip条目。该文件是.exe和.zip。

自解压存档不是唯一不以50 4B 03 04...开头的zip文件类。您可以通过这种方式“隐藏”zip文件中的任意数据。 WinZip和其他工具在读取以这种方式格式化的zip文件时应该没有问题。

如果在文件的开头或其他位置找到文件中的50 4B 03 04签名,则可以查看接下来的几个字节以确定该特定条目是否已加密。通常它看起来像这样:

50 4B 03 04

前四个字节是条目签名。接下来的两个字节是“提取所需的版本”。在这种情况下,它是0x0014,即20.根据pkware规范,这意味着需要pkzip规范的2.0版本来提取条目。 (条目使用的最新zip“功能”由规范的v2.0描述)。如果zip文件中使用了更多高级功能,您可以在那里找到更高的数字。 AES加密需要规范v5.1,因此您应该在该标头中找到0x0033。 (并非所有的zip工具都尊重这一点)。

接下来的2个字节代表通用位标志(规范称它为“位标志”,即使它是位字段),在这种情况下为0x0001。这有0位设置,表示该条目已加密。

该位标志中的其他位具有含义,也可以设置。例如,位6表示使用了强加密 - AES或其他更强的加密。第11位表示该条目使用UTF-8编码作为文件名和注释。

PKWare AppNote.txt spec中提供了所有这些信息。

答案 1 :(得分:4)

zip存档中的基础文件受密码保护。您可以在存档中拥有一系列受密码保护和密码不受保护的文件(例如自述文件,然后是内容)。

答案 2 :(得分:1)

如果您按照您引用的URL中描述ZIP文件的链接,您会发现this one讨论了指示ZIP存档中的文件是否加密的位。似乎存档中的每个文件都可以独立加密。