【问题标题】:differences in .zip format created with winrar and with 7-zip使用 winrar 和 7-zip 创建的 .zip 格式的差异
【发布时间】:2014-09-22 12:32:46
【问题描述】:
全部。
我正在使用第 3 方库来存档/解压缩一些文件。
输入/输出格式为 .zip。
但我发现该库可以很好地读取使用 WinRAR 创建的存档,但无法读取使用 7-zip 创建的存档。
谁能告诉我问题是什么以及如何解决。
档案开始的十六进制视图,用winRar创建:
50 4b 03 04 14 00 00 00 08 00 EC 88 25 45 6e 1a ....
存档开始的十六进制视图,使用 7-zip 创建:
50 4b 03 04 14 00 00 00 08 00 ED 88 25 45 6e 1a ....
区别在于字节EC 和ED。
【问题讨论】:
标签:
zip
7zip
difference
winrar
archiving
【解决方案1】:
这是 ZIP 文件的标题结构:
+---------------------------------------------------------------------+
| BYTE |
|0x0 0x1 0x2 0x3|0x4 0x5|0x6 0x7| 0x8 0x9 |0xA 0xB|0xC 0xD| |
+---------------+-------+-------+-----------+--------+--------+-------+
| signature |version| flags |compression|mod time|mod date| CRC32 |
+---------------+-------+-------+-----------+--------+--------+-------+
| 50 4B 03 04| 14 00| 00 00| 08 00 |EC/ED 88| 25 45| |
+---------------------------------------------------------------------+
-
signature 始终为 0x50 0x4B 0x03 0x04 (如您的情况)。 0x50 = 'P',0x4B = 'K' (Phillip Katz)
-
版本需要解压(0x14 0x00 = 20 -> ZIP 2.0)
- 通用位标志(无标志,您的文件未加密/默认语言编码)
-
压缩方式是放气(08)
所以唯一改变的是修改时间(只是几分钟)。
即使是 CRC32 的前两个字节也是一样的。如果唯一的区别是 EC / ED 值,则问题不应该是存档内容。
更多参考:https://users.cs.jmu.edu/buchhofp/forensics/formats/pkzip.html
【解决方案2】:
7-Zip 存档可以使用多个不同的compression formats 创建,它们与基于Info-ZIP 源代码的标准 ZIP 压缩/解压缩库不兼容。
WinRAR 和 Total Commander 等支持创建/提取 ZIP 文件的应用程序本身使用额外的 DLL 来从非标准 7-Zip 档案中提取文件。
请参阅问题我可以在商业应用程序中使用来自 7-Zip 的 EXE 或 DLL 文件吗?在 7-Zip 的 FAQ 页面上。