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

fra*_*lic 2 binary zip byte binaryfiles zipfile

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

50 4B 03 04
Run Code Online (Sandbox Code Playgroud)

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

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

Che*_*eso 9

ZIP文件必须从一开始就不是这样

50 4B 03 04
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

50 4B 03 04 14 00 01 00 08 00 ... 
Run Code Online (Sandbox Code Playgroud)

前四个字节是条目签名.接下来的两个字节是"提取所需的版本".在这种情况下,它是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规范中找到.