7使用winrar和7-zip创建的.zip格式的差异



all。

我正在使用第三方库来归档/解压缩一些文件。输入/输出格式为.zip。

但我发现lib可以很好地读取用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。。。。

差异在字节CCD_ 1和CCD_。

这是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|       |
+---------------------------------------------------------------------+
  • 签名始终为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

7-Zip档案可以使用几种不同的压缩格式创建,这些压缩格式与基于Info-Zip源代码的标准Zip压缩/解压缩库不兼容。

像WinRAR和Total Commander这样的支持ZIP文件创建/提取的应用程序本身就使用了一个DLL,用于从非标准7-ZIP档案中提取文件。

请参阅问题我可以在商业应用程序中使用7-Zip中的EXE或DLL文件吗在7-Zip的常见问题页面上。

最新更新