.ZIP

.ZIP
Расширение .zip
.zipx (новые алгоритмы сжатия)
MIME-тип application/zip[1]
Сигнатура нет, хотя обычно PK\003\004 , PK\005\006 (empty archive) или PK\007\008 (архив, разделённый на части).
Разработчик Фил Кац, PKWARE
Опубликован 1989
Последний выпуск 6.3.10 (1 ноября 2022; 2 года назад (2022-11-01))
Тип формата Сжатие данных
Расширен из Deflate
Развит в JAR (EAR, RAR (Java), WAR)
Office Open XML (Microsoft)
Open Packaging Conventions
OpenDocument (ODF)
XPI (расширения Mozilla)
Стандарт(ы)

Спецификация формата ZIP от PKWARE

ISO/IEC 21320-1:2015 (подмножество файлового формата ZIP 6.3.3)

ZIP — формат архивации файлов и сжатия данных без потерь. Архив ZIP может содержать один или несколько файлов и каталогов, которые могут быть сжаты разными алгоритмами. Наиболее часто в ZIP используется алгоритм сжатия Deflate. Формат был создан в 1989 году Филом Кацем и реализован в программе PKZIP компании PKWARE[2] в качестве замены формату архивов ARC Тома Хендерсона. Формат ZIP поддерживается множеством программ, в том числе операционными системами Microsoft Windows (с 1998 года) и Apple macOS (с версии 10.3). Многие свободные операционные системы также имеют встроенную поддержку ZIP-архивов.

Архивы ZIP обычно хранятся в виде файлов с расширением «.zip» или «.ZIP» и используют MIME-типapplication/zip[1]. Для создания ZIP-архивов и извлечения (распаковки) содержащихся в них файлов могут использоваться специальные утилиты, например терминальные PKZIP и PKUNZIP[3] или графические WinZip, WinRAR, Info-ZIP, 7-Zip, PeaZip и многие другие. При необходимости ZIP-архив может быть объединён с модулем-распаковщиком в единый исполняемый файл (так называемый SFX-архив).

В начале 1980-х годов развивались BBS и FidoNet, и компания Software Enhancement Associates (SEA) придумала формат сжатия ARC, основанный на кодах Хаффмана. Программа распространялась по модели shareware, при этом зарегистрировавшемуся поставлялись исходные тексты.

Программист Фил Кац написал свои программы для работы с такими архивами — PKARC и PKXARC. Работали они вдесятеро быстрее ARC (движок был написан на ассемблере), стоили дешевле, последняя была распаковщиком и распространялась бесплатно. Программы получили такой успех, что Кац бросил работу и основал компанию PKWARE[4].

В 1988 году SEA засудили Каца за плагиат[5][6], при этом онлайн-общественность была против — казалось, что они задним числом делают формат ARC проприетарным и «Голиаф» судит «Давида» (на поверку обе компании состояли из нескольких человек). Оказалось, что в исходном тексте Каца были те же орфографические ошибки, что у SEA. В результате пришли к такому соглашению: Кац платит более 60 тыс. долларов, отчисляет процент от всех будущих продаж ПО для ARC, делает окончательную программу PKPAK и переходит на новый формат.

Так и появился формат ZIP. Название «zip» (со значением «быстро двигаться») было предложено другом Каца, Робертом Махони (Robert Mahoney). Таким названием они подразумевали, что их приложение быстрее ARC и других архиваторов того времени. Наиболее ранняя известная версия спецификации формата ZIP — .ZIP File Format Specification — была опубликована как часть поставки PKZIP 0.9 в файле APPNOTE.TXT в 1989 году. При этом Кац пообещал, что любой может свободно писать свои реализации[7][8][9][10][11].

Репутация Каца как «хорошего парня» быстро сделала ZIP основным форматом архивов на BBS. А SEA не оправилась от плохого пиара и была свёрнута в 1992 году.

История версий

[править | править код]

У каждой спецификации формата ZIP есть свой собственный номер, который может не совпадать с номерами версий PKZIP (особенно это справедливо для PKZIP 6 и более новых версий). PKWARE постоянно добавляет возможности в свой формат, но новая версия формата становится доступной только при выходе следующего старшего выпуска программы PKZIP.

Версия спецификации Год Новые возможности
2.0 1993 Файлы могут сжиматься методом Deflate[1]
2.1 1996 Сжатие Deflate64
4.5 2001 Описан 64-битный формат ZIP[12]
4.6 2001 Сжатие bzip2 (опубликовано позднее с APPNOTE 5.2)
5.0 2002 Поддержка шифрования DES, 3DES, RC2, RC4 (опубликовано позднее с APPNOTE 5.2)
5.2 2003 Поддержка шифрования AES[13][14], исправление спецификации шифрования RC2-64
6.1 2004 Описано хранение сертификатов[15]
6.2.0 2004 Описано шифрование центрального каталога[16]
6.3.0 2006 Описано хранение имен файлов в формате Юникод (UTF-8)[17]; расширен список поддерживаемых алгоритмов шифрования, сжатия (добавлены такие современные методы, как LZMA и PPMd+) и хеширования
6.3.1 2007 Исправлены стандартные значения хеш-функций SHA-256/384/512[18]
6.3.2 2007 Описан метод сжатия 97 (WavPack)[19]
6.3.3[20] 2012 Изменения форматирования документов для облегчения ссылки на PKWARE Application Note от других стандартов, используя такие методы, как JTC 1 REFERENCING пояснительный доклад (RER) в соответствии с указаниями JTC 1 / SC 34 N 1621.
6.3.4[21] 2014 Обновление адреса офиса PKWARE, Inc.
6.3.5 2018 Документированны методы сжатия 16, 96 и 99. DOS метки времени/эпохи и точности. Добавлены дополнительные поля для ключей и расшифровки, а также опечатки и пояснения.

Утилита WinZip (начиная с версии 12.1) использует файловое расширение .zipx для ZIP-архивов с современными методами сжатия. В ZIPX в дополнение к классическому Deflate могут применяться методы BZip, LZMA, PPMd, JPEG и WavPack[22][23]. По этой причине файлы ZIPX могут не распознаваться классическими утилитами распаковки ZIP, в которых реализован лишь метод Deflate.

ZIP-файлы представляют собой архивы, хранящие несколько файлов. Составляющие архив файлы могут быть сжаты различными способами, в том числе, сохранены без сжатия. Сжатие файлов внутри архива независимо, что позволяет легко извлекать их или добавить новые, без необходимости распаковки или перепаковки всего архива. Такая возможность является явным преимуществом по сравнению с форматом сжатых tar-файлов, которые не допускают простой обработки содержимого с произвольным доступом.

В конце ZIP-файла располагается специальная секция, называемая каталогом. В нем хранится список файлов, находящихся в ZIP-архиве, и данные о местонахождении каждого сжатого файла внутри архива. С использованием данных каталога приложения могут быстро получить полный список файлов из архива, не читая весь ZIP-архив. Файл ZIP-архива также может включать дополнительные данные, не связанные с хранением сжатых данных. В частности, эта возможность позволяет создавать самораспаковывающиеся архивы (SFX), состоящие из приложения-распаковщика и сжатых данных. Такие архивы начинаются с программного кода и распознаются операционной системой в качестве исполняемого файла. При запуске приложение находит ZIP-архив и его каталог и распаковывает файлы, что может быть удобным для передачи архивов пользователям, не имеющим установленных приложений для работы с форматом ZIP. Так как многие приложения распознают формат ZIP по наличию каталога в конце файла, становится также возможным применить простейший стеганографический прием для скрытия архива, добавив архив вслед за каким-либо безобидным файлом, например изображением формата GIF и поменяв расширение файла (по аналогии с так называемым методом «RARJPG»). Большинство приложений отобразит изображение, проигнорировав архив как незначимые мусорные данные, тогда как получатель файла сможет открыть архив после восстановления расширения «.ZIP».

Формат .ZIP использует 32-битный алгоритм CRC для контроля целостности. Также файлы архивов включают в себя две копии каталога архива в целях повышения защиты файлов от порчи данных в процессе передачи или хранения.

Проблемы интернационализации

[править | править код]

Версии формата до 6.3.0 не поддерживали хранение имён файлов в Unicode[24]. Согласно стандарту[24], имена файлов должны храниться в кодировке CP437, стандартной для IBM PC[24], однако на практике DOS-архиваторы использовали установленную в системе кодировку. Встроенный архиватор Windows вплоть до 11 версии также использовал при создании архивов кодировку DOS, соответствующую выбранному языку системы, для обеспечения обратной совместимости. В дальнейшем в стандарт были добавлены две возможности хранения имён файлов в Unicode: 1) при установленном бите 11 в поле Флаги общего назначения (General purpose bit flag) имя файла в поле «File name» заголовка должно считаться содержащим UTF-8, а не однобайтную кодировку, и 2) добавлено поле Unicode Path Extra Field, предназначенное для хранения имени файла только в кодировке UTF-8[24]. Некоторые версии архиваторов на платформе Windows в прошлом также использовали кодировку ANSI. Таким образом, для корректной распаковки файлов с именами, содержащими символы отличных от английского языков, необходимо:[25]

  1. Проверить наличие поля Unicode Path Extra Field, и, если оно есть, использовать имя файла из него, оно в кодировке UTF-8.
  2. Проверить наличие флага 11 в поле General purpose bit flag, и, если он установлен, считать кодировкой имён файлов в поле «File name» UTF-8.
  3. Если поле «ОС упаковки» содержит значение 11 (NTFS, Windows), а значение поле «версия упаковщика» больше или равно 20, считать кодировкой имён файлов в поле «File name» ANSI (Windows) кодировку, соответствующую установленной в системе локали, если такую удаётся подобрать, в противном случае — CP437.
  4. Если поле «ОС упаковки» содержит значение 0 (FAT, DOS), а значение поле «версия упаковщика» между 25 и 40 включительно, считать кодировкой имён файлов в поле «File name» локального заголовка ANSI (Windows) кодировку, а центрального заголовка — OEM (DOS) кодировку, соответствующую установленной в системе локали, если такую удаётся подобрать, в противном случае — CP437.
  5. В остальных случаях, если поле «ОС упаковки» содержит значение 0 (FAT, DOS), 6 (HPFS, OS/2) или 11 (NTFS, Windows), считать кодировкой имён файлов в поле «File name» OEM (DOS) кодировку, соответствующую установленной в системе локали, если такую удаётся подобрать, в противном случае — CP437.
  6. Во всех остальных случаях кодировкой имён файлов в поле «File name» считать установленную в системе кодировку.

Некоторые реализации распаковщиков zip не реализовывали этот алгоритм или реализовывали только частично, вследствие чего при просмотре архива и его распаковке вместо букв национального алфавита пользователь видел хаотичный набор символов, т.н. «крокозябры». С 2016 года данная проблема решена в менеджере файлов и архивов far2l для Linux, BSD и Mac[26], в 2024 году аналогичное решение добавлено[27] в версию 7zip, используемую в дистрибутиве Debian и его производных, а также в версию unzip, используемую в дистрибутиве Ubuntu и его производных[25].

В настоящее время формат ZIP считается общепризнанным форматом для многих приложений[5], включающих функции сжатия, резервного копирования и обмена данными. Наряду с большим количеством утилит, работающих с ZIP-файлами из командной строки, в середине 1990-х годов появились и графические программы для работы с ними. Поддержка формата ZIP включена во множество современных операционных систем.

На текущий момент существует ряд алгоритмов сжатия данных, выигрывающих у ZIP и в скорости, и в степени упаковки, и в дополнительных возможностях. Тем не менее, ZIP по-прежнему остаётся популярным методом сжатия данных[источник не указан 3373 дня].

Множество конкурирующих архиваторов, помимо своего собственного формата, также поддерживает формат ZIP.

Этот способ сжатия также широко используется в других программах и даже в некоторых форматах файлов. Например, файлы *.odt и *.docx — это в действительности ZIP-архивы, содержащие в себе XML-файлы разметки страницы и дополнительные ресурсы (например, изображения). Также ZIP-алгоритм может использоваться в распространённом файловом формате изображений − TIFF.

Существуют сторонние архиваторы, создающие ZIP-архивы с методом сжатия Deflate, но с большей степенью сжатия, чем у оригинальных утилит. Среди них — 7-Zip и модифицированный Кеном Сильверманом архиватор kzip.

Восстановление ZIP-архивов

[править | править код]

Поскольку формат ZIP не поддерживает специальных данных для восстановления (в отличие от, например, RAR), следует помнить, что при повреждении ZIP-архива можно восстановить только его структуру (то есть сделать вновь доступным оглавление архива), но восстановить данные, пострадавшие из-за повреждения, не удастся. Для восстановления повреждённых ZIP-архивов существуют специализированные утилиты, например, бесплатные:

  • Object Fix Zip[28]
  • DiskInternals ZIP Repair[29]

Примечания

[править | править код]
  1. 1 2 3 Registration of a new MIME Content-Type/Subtype - application/zip, IANA, 1993-07-20, Архивировано 23 мая 2012, Дата обращения: 5 января 2012 Источник. Дата обращения: 9 мая 2012. Архивировано 23 мая 2012 года.
  2. "Phillip Katz, Computer Software Pioneer, 37" (англ.). The New York Times. 2000-05-01. Архивировано 30 июля 2017. Дата обращения: 14 июня 2009.
  3. Microcomputer Applications for Public Administration (PADM 5530) Instructions on Using PKZIP and PKUNZIP (DOS). Дата обращения: 5 декабря 2016. Архивировано 16 июня 2016 года.
  4. "The Rise and Fall of a Software Star; Phil Katz Loved Code - and Liquor" (англ.). wsj. 1997-08-15. Архивировано 6 января 2018. Дата обращения: 3 июля 2024.
  5. 1 2 Mark Stamp, Richard M. Low. 3.5 PKZIP // Applied Cryptanalysis: Breaking Ciphers in the Real World. — John Wiley & Sons, 2007. — С. 110—111. — 424 с. — ISBN 9780470148761.
  6. Phil Katz (PKARC author) sued by SEA (ARC author) Архивная копия от 24 августа 2019 на Wayback Machine, 14 Jun 1988, comp.sys.ibm.pc; «Shareware Developers Fight Court Battle Over Copyright Infringement», Daniel J. Lyons, PCWEEK (May 31, 1988) (англ.)
  7. Brian Livingston (2003-09-08), PKZip Must Open Up, Архивировано 11 ноября 2018, Дата обращения: 5 января 2012, The ZIP file format is given freely into the public domain and can be claimed neither legally nor morally by any individual, entity or company Источник. Дата обращения: 7 января 2018. Архивировано 11 ноября 2018 года.
  8. Where Did Zip Files Come From Anyway?, Infinity Design Concepts, Inc., Архивировано 20 ноября 2012, Дата обращения: 5 января 2012 Источник. Дата обращения: 7 января 2018. Архивировано 20 ноября 2012 года.
  9. Press Release, 1989, Архивировано 27 мая 2012, Дата обращения: 5 января 2012 Источник. Дата обращения: 7 января 2018. Архивировано 27 мая 2012 года.
  10. Our Founder - Phil Katz, PKWARE, Архивировано из оригинала 1 октября 2010, Дата обращения: 5 января 2012 Источник. Дата обращения: 7 января 2018. Архивировано из оригинала 14 января 2012 года.
  11. Gareth Horton; Rob Weir; Alex Brown (2010-11-02), sc34-wg1, Архивировано 3 марта 2016, Дата обращения: 5 января 2012 Источник. Дата обращения: 7 января 2018. Архивировано 3 марта 2016 года.
  12. File: APPNOTE.TXT - .ZIP File Format Specification Version: 4.5 Revised: 11/01/2001, 2001-12-03, Архивировано 3 декабря 2001, Дата обращения: 21 апреля 2012 Источник. Дата обращения: 8 августа 2015. Архивировано 3 декабря 2001 года.
  13. APPNOTE.TXT - .ZIP File Format Specification, Version: 5.2 - NOTIFICATION OF CHANGE, 2003-07-16, Архивировано 28 февраля 2014, Дата обращения: 5 января 2012 Источник. Дата обращения: 8 августа 2015. Архивировано 28 февраля 2014 года.
  14. File: APPNOTE.TXT - .ZIP File Format Specification Version: 5.2 - NOTIFICATION OF CHANGE Revised: 06/02/2003, 2003-07-02, Архивировано 2 июля 2003, Дата обращения: 21 апреля 2012 Источник. Дата обращения: 8 августа 2015. Архивировано из оригинала 2 июля 2003 года.
  15. File: APPNOTE - .ZIP File Format Specification Version: 6.1.0 - NOTIFICATION OF CHANGE Revised: 01/20/2004, 2004-08-19, Архивировано 19 августа 2004, Дата обращения: 21 апреля 2012 Источник. Дата обращения: 8 августа 2015. Архивировано 19 августа 2004 года.
  16. APPNOTE.TXT - .ZIP File Format Specification, Version: 6.2.0 - NOTIFICATION OF CHANGE, 2004-04-26, Архивировано 13 февраля 2014, Дата обращения: 5 января 2012 Источник. Дата обращения: 8 августа 2015. Архивировано 13 февраля 2014 года.
  17. APPNOTE.TXT - .ZIP File Format Specification, Version: 6.3.0, 2006-09-29, Архивировано 3 февраля 2014, Дата обращения: 5 января 2012 Источник. Дата обращения: 8 августа 2015. Архивировано 3 февраля 2014 года.
  18. File: APPNOTE.TXT - .ZIP File Format Specification Version: 6.3.1 Revised: April 11, 2007, 2007-05-14, Архивировано 14 мая 2007, Дата обращения: 21 апреля 2012 APPNOTE.TXT - .ZIP File Format Specification (англ.). Дата обращения: 9 мая 2012. Архивировано 5 декабря 2014 года.
  19. File: APPNOTE.TXT - .ZIP File Format Specification Version: 6.3.2 Revised: September 28, 2007, 2007-09-28, Архивировано 28 сентября 2007, Дата обращения: 21 апреля 2012 Источник. Дата обращения: 9 мая 2012. Архивировано 5 декабря 2014 года.
  20. File: APPNOTE.TXT - .ZIP File Format Specification Version: 6.3.3 Revised: September 01, 2012, September 2012, Архивировано 5 декабря 2014, Дата обращения: 9 мая 2012 Источник. Дата обращения: 9 мая 2012. Архивировано 5 декабря 2014 года.
  21. File: APPNOTE.TXT - .ZIP File Format Specification Version: 6.3.4 Revised: October 1, 2014, 2014-10-01, Архивировано 5 декабря 2014, Дата обращения: 9 мая 2012 Источник. Дата обращения: 9 мая 2012. Архивировано 5 декабря 2014 года.
  22. Additional Compression Methods Specification. WinZip. Mansfield, CT: WinZip Computing, S.L (19 мая 2009). Дата обращения: 24 мая 2009. Архивировано 14 апреля 2009 года.
  23. What is a Zipx File? Winzip: Knowledgebase. Mansfield, CT: WinZip Computing, S.L (13 августа 2010). Дата обращения: 17 августа 2010. Архивировано 16 июля 2015 года.
  24. 1 2 3 4 PKWARE. APPNOTE.TXT - .ZIP File Format Specification (англ.). PKWARE. PKWARE (15 июля 2020).
  25. 1 2 ubuntu/+source/unzip - [no description]. git.launchpad.net. Дата обращения: 12 июня 2024.
  26. error processing archives with non-english characters in the names of archived files/folders · Issue #114 · elfmz/far2l (англ.). GitHub. Дата обращения: 23 мая 2024.
  27. Use system locale to select codepage for legacy zip archives (!8) · Merge requests · Debian / 7zip · GitLab (англ.). GitLab (22 мая 2024). Дата обращения: 23 мая 2024.
  28. Программа Object Fix Zip 1.7 // UPgrade : журнал. — 2010. — № 8 (460). — С. 32. — ISSN 1680-4694.
  29. Восстанавливаем любые данные // Chip : журнал. — 2011. — № 8 (149). — С. 125. — ISSN 1609-4212.