【问题标题】: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 ....

区别在于字节ECED

【问题讨论】:

    标签: 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 页面上。

      【讨论】:

        猜你喜欢
        • 2011-04-19
        • 1970-01-01
        • 1970-01-01
        • 2010-09-18
        • 1970-01-01
        • 1970-01-01
        • 2013-07-11
        • 1970-01-01
        • 2019-04-02
        相关资源
        最近更新 更多