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

标签 binary byte binaryfiles zip

我读到 ZIP 文件以以下字节开头:

50 4B 03 04

引用:http://www.garykessler.net/library/file_sigs.html

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

最佳答案

ZIP文件必须以

开头是不正确的
50 4B 03 04
zip 文件中的

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

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

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

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

50 4B 03 04 14 00 01 00 08 00 ... 

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

接下来的 2 个字节表示通用位标志(规范称它为“位标志”,尽管它是一个位字段),在本例中为 0x0001。这设置了位 0,表示该条目已加密。

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

所有这些信息都可以在 PKWare AppNote.txt spec 中找到.

关于binary - 受密码保护的 ZIP 文件的字节签名是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1489857/

相关文章:

Python将字节串写入文件

javascript - 如何使用 CasperJS 通过自定义 POST 请求下载文件

c# - 快速随机访问二进制文件,但在需要时也可以顺序访问。如何布局?

将字符串转到 ascii 字节数组

python2.7 将二进制有符号 double 转换为 ASCII 的难度

git - 为什么 git 应用带有二进制文件的补丁而不创建二进制文件?

python - 将 Pandas 数据框中的整数二值化

c - 管道中等待的字节

c++ - 文件读取 : feof() for binary files

PHP:如何检查示例二进制字符串是否仅为 1's and 0' s?