различия в формате .zip, созданном с помощью winrar и 7-zip

все.

Я использую стороннюю библиотеку для архивации/распаковки некоторых файлов. Формат ввода/вывода — .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.


person Illia Levandovskyi    schedule 22.09.2014    source источник


Ответы (2)


Архивы 7-Zip могут создаваться с использованием нескольких различных форматов сжатия, несовместимых со стандартным ZIP. библиотеки сжатия/распаковки, основанные, например, на исходном коде Info-ZIP.

Такие приложения, как WinRAR и Total Commander, поддерживающие создание/распаковку ZIP-файлов, изначально используют дополнительно DLL для извлечения файлов из нестандартных архивов 7-Zip.

См. вопрос Могу ли я использовать файлы EXE или DLL из 7-Zip в коммерческом приложении? на Часто задаваемые вопросы на странице 7-Zip.

person Mofi    schedule 22.09.2014

Это структура заголовка 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' (Филипп Кац)
  • версия, необходимая для извлечения (0x14 0x00 = 20 -> ZIP 2.0)
  • бит общего назначения флаги (без флагов, ваш файл не зашифрован / кодировка языка по умолчанию)
  • метод сжатия — deflate (08)

Таким образом, меняется только время модификации (всего несколько минут).

Даже первые два байта CRC32 совпадают. Если единственное различие — это значение EC / ED, проблема не должна заключаться в содержимом архива.

Дополнительные ссылки: https://users.cs.jmu.edu/buchhofp/forensics/formats/pkzip.html

person manlio    schedule 22.09.2014