stringtranslate.com

ZIP (формат файла)

ZIP — это формат архивного файла , поддерживающий сжатие данных без потерь . ZIP-файл может содержать один или несколько файлов или каталогов, которые могли быть сжаты. Формат файла ZIP допускает ряд алгоритмов сжатия , хотя DEFLATE является наиболее распространенным. Этот формат был первоначально создан в 1989 году и впервые был реализован в утилите PKZIP компании PKWARE, Inc. [2] в качестве замены предыдущего формата сжатия ARC Томом Хендерсоном. Затем формат ZIP быстро стал поддерживаться многими программными утилитами, отличными от PKZIP. Microsoft включила встроенную поддержку ZIP (под названием «сжатые папки») в версии Microsoft Windows с 1998 года через дополнение «Plus! 98» для Windows 98. Собственная поддержка была добавлена ​​в Windows ME с 2000 года. [ необходима цитата ] Apple включила встроенную поддержку ZIP в Mac OS X 10.3 (через BOMArchiveHelper, теперь Archive Utility ) и более поздние версии. Большинство свободных операционных систем имеют встроенную поддержку ZIP, аналогичную Windows и macOS.

Файлы ZIP обычно используют расширения файлов .zip или .ZIP и тип носителя MIME . [1] ZIP используется в качестве базового формата файла многими программами, обычно под другим именем. При навигации по файловой системе через пользовательский интерфейс графические значки , представляющие файлы ZIP, часто отображаются как документ или другой объект, на котором заметно изображена застежка-молния .application/zip

История

Формат файла .ZIP был разработан Филом Кацем из PKWARE и Гэри Конвеем из Infinity Design Concepts. Формат был создан после того, как Systems Enhancement Associates (SEA) подала иск против PKWARE, утверждая, что архивные продукты последней, названные PKARC, были производными от архивной системы SEA ARC . [3] Название «zip» (что означает «перемещаться с высокой скоростью») было предложено другом Каца, Робертом Махони. [4] Они хотели дать понять, что их продукт будет быстрее, чем ARC и другие форматы сжатия того времени. [4] Самая ранняя известная версия спецификации формата файла .ZIP была впервые опубликована как часть пакета PKZIP 0.9 в файле APPNOTE.TXT в 1989 году. [ необходима ссылка ] Благодаря распространению формата файла zip в APPNOTE.TXT совместимость с форматом файла zip широко распространилась в общедоступном Интернете в 1990-х годах. [5]

PKWARE и Infinity Design Concepts выпустили совместный пресс-релиз 14 февраля 1989 года, в котором формат файла .ZIP был передан в общественное достояние . [6] [7] [8] [9] [10]

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

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

Спецификация формата файла .ZIP официально называется «APPNOTE - .ZIP File Format Specification» и публикуется на сайте PKWARE.com с конца 1990-х годов. [11] Несколько версий спецификации не были опубликованы. Спецификации некоторых функций, таких как сжатие BZIP2 , спецификация надежного шифрования и другие, были опубликованы PKWARE через несколько лет после их создания. URL-адрес онлайн-спецификации несколько раз менялся на сайте PKWARE.

Краткое изложение основных достижений в различных версиях спецификации PKWARE:

WinZip , начиная с версии 12.1, использует расширение .zipx для ZIP-файлов, которые используют методы сжатия более новые, чем DEFLATE; в частности, методы BZip, LZMA, PPMd, Jpeg и Wavpack. Последние 2 применяются к соответствующим типам файлов, когда выбрано сжатие "Лучший метод". [28] [29]

Стандартизация

В апреле 2010 года ISO/IEC JTC 1 инициировал голосование, чтобы определить, следует ли инициировать проект по созданию международного стандарта ISO/IEC, совместимого с ZIP. [30] Предложенный проект под названием «Упаковка документов » предусматривал совместимый с ZIP «минимальный сжатый архивный формат», подходящий для использования с рядом существующих стандартов, включая OpenDocument , Office Open XML и EPUB .

В 2015 году был опубликован стандарт ISO/IEC 21320-1 «Файл-контейнер документа — Часть 1: Ядро», в котором указано, что «Файлы-контейнеры документа соответствуют файлам ZIP». Он требует соблюдения следующих основных ограничений формата файла ZIP: [31]

Дизайн

Файлы .ZIP — это архивы, в которых хранится несколько файлов. ZIP позволяет сжимать содержащиеся в них файлы с помощью множества различных методов, а также просто хранить файл без его сжатия. Каждый файл хранится отдельно, что позволяет сжимать разные файлы в одном архиве с помощью различных методов. Поскольку файлы в архиве ZIP сжимаются по отдельности, их можно извлекать или добавлять новые, не применяя сжатие или распаковку ко всему архиву. Это контрастирует с форматом сжатых файлов tar , для которых такая обработка с произвольным доступом невозможна.

Каталог помещается в конец ZIP-файла. Он определяет, какие файлы находятся в ZIP-файле, и определяет, где в ZIP-файле находится этот файл. Это позволяет считывателям ZIP-файлов загружать список файлов, не читая весь ZIP-архив. ZIP-архивы также могут включать дополнительные данные, не связанные с ZIP-архивом. Это позволяет превратить ZIP-архив в самораспаковывающийся архив (приложение, которое распаковывает содержащиеся в нем данные), добавив программный код в начало ZIP-архива и пометив файл как исполняемый. Хранение каталога в конце также позволяет скрыть сжатый файл, добавив его к безобидному файлу, например, к файлу изображения GIF.

Формат .ZIP использует 32-битный алгоритм CRC и включает две копии метаданных каждой записи для обеспечения большей защиты от потери данных. Алгоритм CRC-32 был предоставлен Дэвидом Швадерером и может быть найден в его книге "C Programmers Guide to NetBIOS", опубликованной Howard W. Sams & Co. Inc. [32]

Структура

Внутренняя планировка ZIP-64

ZIP-файл правильно идентифицируется по наличию записи конца центрального каталога , которая расположена в конце структуры архива, чтобы обеспечить легкое добавление новых файлов. Если запись конца центрального каталога указывает на непустой архив, имя каждого файла или каталога в архиве должно быть указано в записи центрального каталога вместе с другими метаданными о записи и смещением в ZIP-файле, указывающим на фактические данные записи. Это позволяет относительно быстро выполнить листинг файлов архива, поскольку для просмотра списка файлов не нужно читать весь архив. Записи в ZIP-файле также включают эту информацию для избыточности в локальном заголовке файла . Поскольку к ZIP-файлам можно добавлять данные, действительными являются только файлы, указанные в центральном каталоге в конце файла. Сканирование ZIP-файла на предмет локальных заголовков файлов недействительно (за исключением случая поврежденных архивов), поскольку центральный каталог может объявить, что некоторые файлы были удалены, а другие обновлены.

Например, мы можем начать с ZIP-файла, содержащего файлы A, B и C. Затем файл B удаляется, а C обновляется. Этого можно добиться, просто добавив новый файл C в конец исходного ZIP-файла и добавив новый центральный каталог, в котором перечислены только файл A и новый файл C. Когда ZIP был впервые разработан, передача файлов с помощью дискет была обычным делом, но запись на диски занимала очень много времени. Если у вас был большой zip-файл, возможно, охватывающий несколько дисков, и вам нужно было обновить только несколько файлов, вместо того, чтобы читать и переписывать все файлы, было бы значительно быстрее просто прочитать старый центральный каталог, добавить новые файлы, а затем добавить обновленный центральный каталог.

Порядок записей файлов в центральном каталоге не обязательно должен совпадать с порядком записей файлов в архиве.

Каждая запись, хранящаяся в архиве ZIP, начинается с локального заголовка файла с информацией о файле, такой как комментарий, размер файла и имя файла, за которыми следуют необязательные поля данных «extra», а затем, возможно, сжатые, возможно, зашифрованные данные файла. Поля данных «Extra» являются ключом к расширяемости формата ZIP. Поля «Extra» используются для поддержки формата ZIP64, WinZip-совместимого шифрования AES, атрибутов файлов и более высокого разрешения NTFS или временных меток файлов Unix. Другие расширения возможны через поле «Extra». Спецификация требует, чтобы инструменты ZIP игнорировали поля Extra, которые они не распознают.

Формат ZIP использует специальные 4-байтовые «сигнатуры» для обозначения различных структур в файле. Каждая запись файла отмечена специальной сигнатурой. Конец записи центрального каталога обозначен специальной сигнатурой, а каждая запись в центральном каталоге начинается с 4-байтовой подписи заголовка центрального файла .

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

Инструменты, которые правильно считывают ZIP-архивы, должны сканировать конец записи центральной директории сигнатуры, а затем, по мере необходимости, другие, указанные, записи центральной директории. Они не должны сканировать записи из верхней части ZIP-файла, потому что (как ранее упоминалось в этом разделе) только центральный каталог указывает, где начинается фрагмент файла, и что он не был удален. Сканирование может привести к ложным срабатываниям, так как формат не запрещает другим данным находиться между фрагментами, а потокам данных файла содержать такие сигнатуры. Однако инструменты, которые пытаются восстановить данные из поврежденных ZIP-архивов, скорее всего, будут сканировать архив на предмет локальных сигнатур заголовков файлов; это усложняется тем фактом, что сжатый размер фрагмента файла может храниться после фрагмента файла, что затрудняет последовательную обработку.

Большинство сигнатур заканчиваются коротким целым числом 0x4b50, которое хранится в порядке little-endian . В виде строки ASCII это читается как «PK», инициалы изобретателя Фила Каца. Таким образом, когда файл ZIP просматривается в текстовом редакторе, первые два байта файла обычно представляют собой «PK». (Самораспаковывающиеся ZIP-файлы DOS, OS/2 и Windows имеют EXE перед ZIP, поэтому начинаются с «MZ»; самораспаковывающиеся ZIP-файлы для других операционных систем могут также предваряться исполняемым кодом для извлечения содержимого архива на этой платформе.)

Спецификация .ZIP также поддерживает распространение архивов по нескольким файлам файловой системы. Первоначально предназначенная для хранения больших ZIP-файлов на нескольких дискетах , эта функция теперь используется для отправки ZIP-архивов частями по электронной почте или через другие транспорты или сменные носители.

Файловая система FAT DOS имеет разрешение временной метки всего в две секунды; записи файлов ZIP имитируют это. В результате встроенное разрешение временной метки файлов в архиве ZIP составляет всего две секунды, хотя для хранения более точных временных меток могут использоваться дополнительные поля. Формат ZIP не имеет понятия часового пояса , поэтому временные метки имеют смысл только в том случае, если известно, в каком часовом поясе они были созданы.

В сентябре 2006 года PKWARE выпустила пересмотренную версию спецификации ZIP, которая обеспечивает хранение имен файлов с использованием UTF-8 , наконец добавив совместимость с Unicode в ZIP. [17]

Заголовки файлов

Все многобайтовые значения в заголовке хранятся в порядке байт little-endian . Все поля длины подсчитывают длину в байтах.

Заголовок локального файла

Дополнительное поле содержит различные необязательные данные, такие как атрибуты, специфичные для ОС. Оно разделено на записи, каждая из которых имеет как минимум 16-битную сигнатуру и 16-битную длину. Например, запись дополнительного поля локального файла ZIP64 имеет сигнатуру 0x0001 и длину 16 байт (или более), так что могут следовать два 64-битных значения (несжатый и сжатый размеры). Другое распространенное расширение локального файла — 0x5455 (или «UT»), которое содержит 32-битные метки времени UTC UNIX.

Далее сразу следуют сжатые данные.

Описатель данных

Если бит со смещением 3 (0x08) поля флагов общего назначения установлен, то CRC-32 и размеры файлов неизвестны при записи заголовка. Если архив в формате Zip64, сжатые и несжатые поля размера имеют длину 8 байт вместо 4 байт (см. раздел 4.3.9.2 [34] ). Эквивалентные поля в локальном заголовке (или в дополнительном поле расширенной информации Zip64 в случае архивов в формате Zip64) заполняются нулями, а CRC-32 и размер добавляются в 12-байтовой структуре (возможно, с предшествующей 4-байтовой подписью) сразу после сжатых данных:

Заголовок файла центрального каталога (CDFH)

Запись заголовка файла центрального каталога представляет собой расширенную форму локального заголовка:

Конец записи центрального каталога (EOCD)

После всех записей центрального каталога следует запись конца центрального каталога (EOCD), которая отмечает конец ZIP-файла:

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

Методы сжатия

Спецификация формата файла .ZIP документирует следующие методы сжатия: Store (без сжатия), Shrink ( LZW ), Reduce (уровни 1–4; LZ77 + вероятностный), Implode, Deflate, Deflate64, bzip2 , LZMA , WavPack , PPMd и вариант LZ77, предоставленный инструкцией IBM z/OS CMPSC. [35] [22] Наиболее часто используемый метод сжатия — DEFLATE , который описан в IETF RFC  1951.

Другие методы, упомянутые, но не задокументированные подробно в спецификации, включают: PKWARE DCL Implode (старый IBM TERSE), новый IBM TERSE , IBM LZ77 z Architecture (PFS) и вариант JPEG. Метод «Tokenize» был зарезервирован для третьей стороны, но поддержка так и не была добавлена. [22]

Слово Implode используется PKWARE слишком часто: DCL/TERSE Implode отличается от старого PKZIP Implode, предшественника Deflate. DCL Implode не документирован частично из-за его патентованной природы, принадлежащей IBM, но Марк Адлер тем не менее предоставил декомпрессор под названием "blast" наряду с zlib. [36]

Шифрование

ZIP поддерживает простую систему симметричного шифрования на основе пароля , известную как ZipCrypto. Она задокументирована в спецификации ZIP и известна как имеющая серьезные недостатки. В частности, она уязвима для атак с известным открытым текстом , которые в некоторых случаях усугубляются плохой реализацией генераторов случайных чисел . [5] Компьютеры, работающие под управлением собственной ОС Microsoft Windows без сторонних архиваторов, могут открывать, но не создавать файлы ZIP, зашифрованные с помощью ZipCrypto, но не могут извлекать содержимое файлов, использующих другое шифрование. [37]

Новые функции, включая новые методы сжатия и шифрования (например, AES ), были задокументированы в спецификации формата файла ZIP, начиная с версии 5.2. Разработанный WinZip открытый стандарт на основе AES («AE-x» в APPNOTE) также используется 7-Zip и Xceed , но некоторые поставщики используют другие форматы. [38] PKWARE SecureZIP (SES, проприетарный) также поддерживает методы шифрования RC2, RC4, DES, Triple DES, шифрование и аутентификацию на основе цифровых сертификатов ( X.509 ) и шифрование заголовка архива. Однако он запатентован (см. § Сильные противоречия в отношении шифрования). [39]

Шифрование имени файла введено в спецификации формата файла .ZIP 6.2, которая шифрует метаданные, хранящиеся в разделе центрального каталога архива, но разделы локального заголовка остаются незашифрованными. Соответствующий требованиям архиватор может фальсифицировать данные локального заголовка при использовании шифрования центрального каталога. Начиная с версии 6.2 спецификации поля «Метод сжатия» и «Сжатый размер» в локальном заголовке еще не маскируются.

ZIP64

Исходный формат .ZIP имел ограничение в 4 ГБ (2,32 байта ) по различным параметрам (размер несжатого файла, размер сжатого файла и общий размер архива), а также ограничение в 65 535 (2,16 -1 ) записей в архиве ZIP. В версии 4.5 спецификации (которая отличается от версии 4.5 любого конкретного инструмента) PKWARE представил расширения формата "ZIP64", чтобы обойти эти ограничения, увеличив ограничения до 16  ЭБ (2,64 байта ). По сути, он использует "обычную" запись центрального каталога для файла, за которой следует необязательная запись каталога "zip64", которая имеет большие поля. [40]

Формат заголовка локального файла (LOC) и заголовка файла центрального каталога (CDFH) одинаков в ZIP и ZIP64. Однако ZIP64 определяет дополнительное поле, которое может быть добавлено к этим записям по усмотрению компрессора, целью которого является хранение значений, не помещающихся в классические записи LOC или CDFH. Чтобы указать, что фактические значения хранятся в дополнительных полях ZIP64, они устанавливаются в 0xFFFF или 0xFFFFFFFF в соответствующей записи LOC или CDFH. Если одна запись не помещается в классическую запись LOC или CDFH, только эту запись требуется переместить в дополнительное поле ZIP64. Другие записи могут оставаться в классической записи. Поэтому не все записи, показанные в следующей таблице, могут храниться в дополнительном поле ZIP64. Однако, если они появляются, их порядок должен быть таким, как показано в таблице.

С другой стороны, формат EOCD для ZIP64 немного отличается от обычной версии ZIP. [33]

Это также не обязательно последняя запись в файле. Далее следует End of Central Directory Locator (дополнительные 20 байт в конце).

Проводник файлов в Windows XP не поддерживает ZIP64, но Проводник в Windows Vista и более поздних версиях поддерживает. [ необходима цитата ] Аналогично, некоторые библиотеки расширений поддерживают ZIP64, такие как DotNetZip, QuaZIP [41] и IO::Compress::Zip в Perl. Встроенный zipfile Python поддерживает его с версии 2.5 и использует его по умолчанию с версии 3.4. [42] Встроенный java.util.zip OpenJDK поддерживает ZIP64 с версии Java 7. [ 43] Android Java API поддерживает ZIP64 с версии Android 6.0. [44] Архивная утилита Mac OS Sierra, в частности, не поддерживает ZIP64 и может создавать поврежденные архивы, когда требуется ZIP64. [45] Однако команда ditto, поставляемая с Mac OS, распаковывает файлы ZIP64. [46] Более поздние [ когда? ] версии Mac OS поставляются с командными инструментами zip и unzip от info-zip, которые поддерживают Zip64: для проверки запустите zip -v и найдите «ZIP64_SUPPORT».

Сочетание с другими форматами файлов

Формат файла .ZIP позволяет размещать комментарий, содержащий до 65 535 (2 16 −1) байт данных в конце файла после центрального каталога. [33] Кроме того, поскольку центральный каталог определяет смещение каждого файла в архиве относительно начала, первая запись файла может начинаться со смещения, отличного от нуля, хотя некоторые инструменты, например gzip , не будут обрабатывать архивные файлы, которые не начинаются с записи файла со смещением ноль.

Это позволяет произвольным данным появляться в файле как до, так и после данных архива ZIP, и архив по-прежнему может быть прочитан приложением ZIP. Побочным эффектом этого является то, что можно создать файл, который является как рабочим архивом ZIP, так и другим форматом, при условии, что другой формат допускает произвольные данные в конце, начале или середине. Самораспаковывающиеся архивы (SFX) в форме, поддерживаемой WinZip, используют это преимущество, поскольку они являются исполняемыми файлами ( .exe ), которые соответствуют спецификации PKZIP AppNote.txt, и могут быть прочитаны совместимыми инструментами или библиотеками zip.

Это свойство формата .ZIP и формата JAR , который является вариантом ZIP, может быть использовано для сокрытия вредоносного контента (например, вредоносных классов Java) внутри, казалось бы, безобидного файла, например, изображения GIF, загруженного в Интернет. Этот так называемый эксплойт GIFAR был продемонстрирован как эффективная атака на веб-приложения, такие как Facebook. [47]

Пределы

Минимальный размер файла .ZIP составляет 22 байта. Такой пустой файл zip содержит только End of Central Directory Record (EOCD):
[0x50,0x4B,0x05,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]

Максимальный размер как архивного файла, так и отдельных файлов внутри него составляет 4 294 967 295 байт (2 32 −1 байт или 4 ГБ минус 1 байт) для стандартного ZIP. Для ZIP64 максимальный размер составляет 18 446 744 073 709 551 615 байт (2 64 −1 байт или 16 ЭБ минус 1 байт). [48]

Открытые расширения

Профиль, оптимизированный для поиска (SOZip)

Для формата ZIP был предложен профиль Seek-Optimized ZIP file (SOZip) [49] . Такой файл содержит один или несколько файлов, сжатых Deflate, которые организованы и аннотированы таким образом, что считыватель, поддерживающий SOZip, может выполнять очень быстрый произвольный доступ (поиск) в сжатом файле. SOZip позволяет получать доступ к большим сжатым файлам напрямую из .zip-файла без предварительной распаковки. Он сочетает использование блочных сбросов ZLib, выпускаемых с регулярным интервалом, со скрытым индексным файлом, отображающим смещения несжатого файла на смещения в сжатом потоке. Читатели ZIP, не знающие об этом расширении, могут читать файл с поддержкой SOZip обычным образом и игнорировать расширенные функции, которые поддерживают эффективную возможность поиска.

Фирменные расширения

Дополнительное поле

Формат файла .ZIP включает в себя дополнительное поле в заголовках файлов, которое может использоваться для хранения дополнительных данных, не определенных существующими спецификациями ZIP, и которое позволяет совместимым архиваторам, которые не распознают поля, безопасно пропускать их. Идентификаторы заголовков 0–31 зарезервированы для использования PKWARE. Остальные идентификаторы могут использоваться сторонними поставщиками для собственного использования.

Серьёзные споры о шифровании

Когда в 2003 году была выпущена публичная бета-версия WinZip 9.0, WinZip представила собственное шифрование AES-256 , используя другой формат файла, вместе с документацией для новой спецификации. [50] Сами стандарты шифрования не были проприетарными , но PKWARE не обновляла APPNOTE.TXT, чтобы включить в него спецификацию Strong Encryption Specification (SES) с 2001 года, которая использовалась версиями PKZIP 5.0 и 6.0. Технический консультант WinZip Кевин Кирни и менеджер по продукту StuffIt Мэтью Ковингтон обвинили PKWARE в сокрытии SES, но главный технический директор PKZIP Джим Петерсон заявил, что шифрование на основе сертификатов все еще было неполным.

В другом спорном шаге PKWare подала заявку на патент 16 июля 2003 года, описывающий метод объединения ZIP и сильного шифрования для создания защищенного файла. [51]

В конце концов, PKWARE и WinZip согласились поддерживать продукты друг друга. 21 января 2004 года PKWARE объявила о поддержке формата сжатия AES на основе WinZip. [52] В более поздней версии WinZip beta он смог поддерживать файлы ZIP на основе SES. [53] В конечном итоге PKWARE выпустила версию 5.2 спецификации формата файла .ZIP для общественности, которая документировала SES. Проект свободного программного обеспечения 7-Zip также поддерживает AES, но не SES в файлах ZIP (как и его порт POSIX p7zip ).

При использовании шифрования AES в WinZip метод сжатия всегда устанавливается на 99, а фактический метод сжатия сохраняется в дополнительном поле данных AES. [54] Напротив, спецификация Strong Encryption сохраняет метод сжатия в базовом сегменте заголовка файла локального заголовка и центрального каталога, если только шифрование центрального каталога не используется для маскировки/шифрования метаданных.

Выполнение

Существует множество инструментов .ZIP и множество библиотек .ZIP для различных сред программирования; используемые лицензии включают проприетарное и свободное программное обеспечение . WinZip , WinRAR , Info-ZIP , ZipGenius , 7-Zip , PeaZip и B1 Free Archiver — это известные инструменты .ZIP , доступные на различных платформах. Некоторые из этих инструментов имеют библиотечные или программные интерфейсы.

Некоторые библиотеки разработки, лицензированные по соглашению об открытом исходном коде, — это libzip , libarchive и Info-ZIP . Для Java: Java Platform, Standard Edition содержит пакет "java.util.zip" для обработки стандартных файлов .ZIP ; библиотека Zip64File специально поддерживает большие файлы (больше 4 ГБ) и обрабатывает файлы .ZIP с помощью случайного доступа; а инструмент Apache Ant содержит более полную реализацию, выпущенную по Apache Software License .

Реализации Info-ZIP формата .ZIP добавляют поддержку функций файловой системы Unix, таких как идентификаторы пользователей и групп, разрешения файлов и поддержка символических ссылок. Реализация Apache Ant знает об этом в той степени, в которой она может создавать файлы с предопределенными разрешениями Unix. Реализации Info-ZIP также знают, как использовать возможности исправления ошибок, встроенные в формат сжатия .ZIP . Некоторые программы этого не делают и будут завершать работу с файлом, содержащим ошибки.

Инструменты Info-ZIP Windows также поддерживают разрешения файловой системы NTFS и попытаются преобразовать разрешения NTFS в разрешения Unix или наоборот при извлечении файлов. Это может привести к потенциально непреднамеренным комбинациям, например, файлам .exe , создаваемым на томах NTFS с запрещенным разрешением на выполнение.

Версии Microsoft Windows включают поддержку сжатия .ZIP в Explorer с тех пор, как был выпущен пакет Microsoft Plus! для Windows 98. Microsoft называет эту функцию «Сжатые папки». Не все функции .ZIP поддерживаются функцией Windows Compressed Folders. Например, шифрование не поддерживается в Windows 10 Home edition, [55] хотя оно может расшифровывать. Кодировка записей Unicode не поддерживается до Windows 7 , в то время как разделенные и составные архивы не могут быть прочитаны или записаны функцией Compressed Folders, а также не поддерживается шифрование AES. [56] Поддержка Windows .zip возникла в результате приобретения «VisualZip», написанного Дэйвом Пламмером . [57] [58] [59]

Формат OpenDocument (ODF) начал использовать формат архива zip в 2005 году. ODF — это открытый формат для офисных документов всех типов, это формат файла по умолчанию, используемый в Collabora Online , LibreOffice и других. [60] Microsoft Office начал использовать формат архива zip в 2006 году для своих файлов Office Open XML .docx, .xlsx, .pptx и т. д., который стал форматом файла по умолчанию в Microsoft Office 2007 .

Вопросы интернационализации

Версии формата до 6.3.0 не поддерживали хранение имён файлов в Unicode . [61] Согласно стандарту, [61] имена файлов должны храниться в кодировке CP437 , которая является стандартной для IBM PC , [61] но на практике архиваторы DOS использовали установленную в системе кодировку символов . Встроенный архиватор Windows до версии 11 также использовал кодировку DOS, соответствующую выбранному системному языку, для обратной совместимости при создании архивов. Впоследствии стандарт был обновлён, чтобы включить два варианта хранения имён файлов в Unicode: 1) когда установлен 11-й бит в поле флага бита общего назначения, имя файла в поле «Имя файла» заголовка следует рассматривать как UTF-8, а не как однобайтовую кодировку, и 2) было добавлено дополнительное поле Unicode Path для хранения имени файла в кодировке UTF-8. [61] Некоторые версии архиваторов на платформе Windows в прошлом также использовали кодировку ANSI. Таким образом, для корректного извлечения файлов с именами, содержащими неанглийские символы, необходимо: [62]

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

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

Наследие

Существует множество других стандартов и форматов, использующих "zip" как часть своего имени. Например, zip отличается от gzip , а последний определен в IETF RFC  1952. И zip, и gzip в основном используют алгоритм DEFLATE для сжатия. Аналогично, формат ZLIB (IETF RFC  1950) также использует алгоритм сжатия DEFLATE, но указывает другие заголовки для проверки ошибок и согласованности. Другие распространенные, похожие по названию форматы и программы с другими собственными форматами включают 7-Zip , bzip2 и rzip .

Обеспокоенность

Теоретический максимальный коэффициент сжатия для сырого потока DEFLATE составляет около 1032 к одному, [65] но, эксплуатируя формат ZIP непреднамеренными способами, можно создать архивы ZIP со степенью сжатия миллиарды к одному. Эти zip-бомбы распаковываются до чрезвычайно больших размеров, превышая возможности компьютера, на котором они распаковываются. [66]

Смотрите также

Ссылки

  1. ^ abc Регистрация нового MIME Content-Type/Subtype - application/zip, IANA , 20 июля 1993 г. , получено 5 января 2012 г.
  2. ^ "Филлип Кац, пионер компьютерного программного обеспечения, 37". The New York Times'. 1 мая 2000 г. Получено 14 июня 2009 г.
  3. ^ Мюррей, Мэтт; Танненбаум, Джеффри А. (15 августа 1997 г.). «Взлет и падение звезды программного обеспечения; Фил Кац любил код и спиртное». The Wall Street Journal (онлайн-ред.). Архивировано из оригинала 4 марта 2016 г.Альтернативный URL обновлен 19.06.2000.
  4. ^ ab "Библиотека документальных фильмов BBS". www.bbsdocumentary.com . Получено 25 сентября 2020 г. .
  5. ^ ab Stay, Michael. "ZIP Attacks with Reduced Known Plaintext" (PDF) . Math.ucr.edu . Архивировано из оригинала (PDF) 28 октября 2017 г. . Получено 9 сентября 2017 г. .
  6. Брайан Ливингстон (8 сентября 2003 г.), PKZip Must Open Up , получено 5 января 2012 г. Формат файла ZIP предоставляется бесплатно в общественное достояние и не может быть предметом правовых или моральных претензий со стороны любого лица, организации или компании.
  7. ^ Откуда вообще взялись ZIP-файлы?, Infinity Design Concepts, Inc. , получено 5 января 2012 г.
  8. Пресс-релиз, 1989 , получено 5 января 2012 г.
  9. ^ Наш основатель - Фил Кац, PKWARE, архивировано из оригинала 1 октября 2010 г. , извлечено 5 января 2012 г.
  10. Гарет Хортон; Роб Вейр; Алекс Браун (2 ноября 2010 г.), sc34-wg1 , получено 5 января 2012 г.
  11. ^ .ZIP Application Note , получено 20 июля 2012 г.
  12. ^ Файл: APPNOTE.TXT - .ZIP Спецификация формата файла Версия: 4.5 Изменено: 11/01/2001, 3 декабря 2001, заархивировано из оригинала 3 декабря 2001 , извлечено 21 апреля 2012
  13. ^ APPNOTE.TXT - Спецификация формата файла .ZIP, Версия: 5.2 - Уведомление об изменении, 16 июля 2003 г. , получено 5 января 2012 г.
  14. ^ Файл: APPNOTE.TXT - .ZIP File Format Specification Version: 5.2 - Notification of Change – Revised: 06/02/2003, 2 июля 2003, архивировано из оригинала 2 июля 2003 , извлечено 21 апреля 2012
  15. ^ Файл: APPNOTE - Спецификация формата файла .ZIP Версия: 6.1.0 - Уведомление об изменении – Пересмотрено: 20.01.2004, 19 августа 2004, архивировано из оригинала 19 августа 2004 , извлечено 21 апреля 2012
  16. ^ APPNOTE.TXT - Спецификация формата файла .ZIP, Версия: 6.2.0 - Уведомление об изменении, 26 апреля 2004 г. , получено 5 января 2012 г.
  17. ^ ab APPNOTE.TXT - Спецификация формата файла .ZIP, версия: 6.3.0, 29 сентября 2006 г. , получено 5 января 2012 г.
  18. ^ APPNOTE.TXT - Спецификация формата файла .ZIP, версия: 6.3.1, 11 апреля 2007 г. , получено 25 июня 2018 г.
  19. ^ APPNOTE.TXT - Спецификация формата файла .ZIP Версия: 6.3.2, 28 сентября 2007 г. , получено 25 июня 2018 г.
  20. ^ APPNOTE.TXT - Спецификация формата файла .ZIP Версия: 6.3.3, 1 сентября 2012 г. , получено 25 июня 2018 г.
  21. ^ APPNOTE.TXT - Спецификация формата файла .ZIP Версия: 6.3.4, 1 октября 2014 г. , получено 25 июня 2018 г.
  22. ^ abc APPNOTE.TXT - Спецификация формата файла .ZIP Версия: 6.3.5, 20 декабря 2018 г. , получено 3 января 2019 г.
  23. ^ APPNOTE.TXT - Спецификация формата файла .ZIP Версия: 6.3.6, 26 апреля 2019 г. , получено 3 января 2019 г.
  24. ^ APPNOTE.TXT - Спецификация формата файла .ZIP Версия: 6.3.7, 1 июня 2020 г. , получено 6 июня 2020 г.
  25. ^ APPNOTE.TXT - Спецификация формата файла .ZIP Версия: 6.3.8, 15 июня 2020 г. , получено 7 июля 2020 г.
  26. ^ APPNOTE.TXT - Спецификация формата файла .ZIP Версия: 6.3.9, 15 июля 2020 г. , получено 8 августа 2020 г.
  27. ^ APPNOTE.TXT - Спецификация формата файла .ZIP Версия: 6.3.10, 1 ноября 2022 г. , получено 20 ноября 2022 г.
  28. ^ "Спецификация дополнительных методов сжатия". WinZip . Мэнсфилд, Коннектикут : WinZip Computing, SL 19 мая 2009 г. Получено 24 мая 2009 г.
  29. ^ "Что такое файл Zipx?". Winzip: База знаний . Мэнсфилд, Коннектикут : WinZip Computing, SL 13 августа 2010 г. Получено 17 августа 2010 г.
  30. ^ "ISO/IEC JTC 1/SC 34 — Языки описания и обработки документов" (PDF) . 12 апреля 2010 г. Архивировано из оригинала (PDF) 12 мая 2014 г. Получено 10 мая 2014 г.
  31. ^ "Файл контейнера документов ISO/IEC 21320-1:2015 — Часть 1: Ядро". ITTF. 2015.
  32. ^ eZine (1 января 2023 г.). «Формат файла .ZIP». Neperos.com .
  33. ^ abcdefgh "Файл: APPNOTE.TXT - .ZIP File Format Specification: Version: 6.3.4" (TXT) . Pkware.com . Получено 9 сентября 2017 г. .
  34. ^ "Файл: APPNOTE.TXT - Спецификация формата файла .ZIP". PKWARE Inc. Получено 21 февраля 2022 г.
  35. ^ Адлер, Марк. «Как связаны zlib, gzip и zip? Что у них общего и чем они отличаются?» . Получено 27 ноября 2018 г.
  36. ^ "Часто задаваемые вопросы о zlib". zlib . PKWare DCL использует совершенно другой формат сжатых данных, чем PKZIP и zlib. Однако вы можете поискать в каталоге contrib/blast zlib возможное решение вашей проблемы.(вклад/взрыв)
  37. ^ Сандип (15 сентября 2021 г.). «Как защитить паролем ZIP-файл». Tech News Today .
  38. ^ "Информация о шифровании AES: Спецификация шифрования AE-1 и AE-2". Winzip.com . Получено 9 сентября 2017 г. .
  39. ^ "APPNOTE - PKZIP/SecureZIP - Сайт поддержки PKWARE". Pkware.com . Получено 9 сентября 2017 г. .
  40. ^ "Файл: APPNOTE.TXT - .Спецификация формата файла ZIP: Версия: 6.3.4" (TXT) . Pkware.cachefly.net . Получено 9 сентября 2017 г. .
  41. ^ "Изменения QuaZIP". 22 января 2014 г. Получено 25 января 2014 г.
  42. ^ "Улучшение Python: использование allowZip64=True по умолчанию (3.4)" . Получено 6 мая 2014 г. .
  43. ^ Шэнь, Сюэмин (17 апреля 2009 г.). «ZIP64, формат для > 4G Zipfile, теперь поддерживается». Блог Сюэмин Шеня . Sun Microsystems . Получено 27 сентября 2010 г.
  44. ^ "Войти - Аккаунты Google". code.google.com . Получено 9 сентября 2017 г. .
  45. ^ "Ошибка: недопустимая подпись заголовка файла центрального каталога при распаковке больших файлов, сжатых с помощью mac os · Проблема № 69 · thejoshwolfe/yauzl". GitHub .
  46. ^ "Извлечение большого zip-файла (50 ГБ) на Mac OS X" . Получено 17 декабря 2018 г. .
  47. ^ Макмиллан, Роберт (август 2008 г.). «Фотография, которая может украсть ваши учетные данные в сети». Infoworld.com . Получено 9 сентября 2017 г. .
  48. ^ "ZipArchive: Формат Zip64: Превышение пределов размеров файлов и количества файлов и сегментов". Artpol-software.com . Получено 9 сентября 2017 г. .
  49. ^ Руо, Эвен (OSGeo). "Профиль ZIP (SOZip) с оптимизацией для поиска" (markdown) . github.com . Получено 11 января 2023 г. .
  50. ^ "WinZip – AES Encryption Information". Winzip.com . Получено 9 сентября 2017 г. .
  51. ^ Макмиллан, Роберт (25 июля 2003 г.). «PKWare ищет патент на формат файла .zip». InfoWorld.com . Архивировано из оригинала 10 августа 2003 г. Получено 16 июня 2008 г.
  52. ^ "Производители программного обеспечения патчат Zip tiff". News.com . Получено 9 сентября 2017 г. .
  53. ^ Джон Лейден. «Компрометация шифрования zip-файла раскрыта». Theregister.co.uk . Получено 9 сентября 2017 г. .
  54. ^ "Информация о шифровании AES: Спецификация шифрования AE-1 и AE-2". Winzip.com . Получено 9 сентября 2017 г. .
  55. ^ Махам Мухтар (август 2017 г.). «2 способа исправить неактивность опции «Шифровать содержимое для защиты данных» в Windows 10». iTechtics . EFS доступна для всех редакций Windows 10, кроме Windows 10 Home.
  56. ^ «Почему поддержка сжатых папок Windows (Zip-папок) застряла на рубеже веков?». 15 мая 2018 г.
  57. ^ Кристофер Харпер (20 апреля 2024 г.). «Добавление поддержки ZIP-файлов в Windows 30 лет назад едва не привело к увольнению создателя диспетчера задач». Tom's Hardware . Получено 6 мая 2024 г.
  58. ^ Дэйв Пламмер (8 января 2021 г.). "06.Secret History of Windows ZIPFolders". YouTube . Получено 6 мая 2024 г. .
  59. Дэйв Пламмер (17 апреля 2024 г.). «Как создание ZIPFolders для Windows чуть не привело к увольнению из Microsoft!». YouTube . Получено 6 мая 2024 г.
  60. ^ Холл, Джим (15 августа 2022 г.). «Как структурированы файлы ODT». opensource.com . Получено 9 июля 2023 г. .
  61. ^ abcd PKWARE (15 июля 2020 г.). "APPNOTE.TXT - Спецификация формата файла .ZIP". PKWARE .
  62. ^ ab "ubuntu/+source/unzip - [нет описания]". git.launchpad.net .
  63. ^ "Ошибка обработки архивов с неанглийскими символами в именах архивированных файлов/папок · Проблема № 114 · elfmz/far2l". GitHub . Получено 23 мая 2024 г. .
  64. ^ "Использовать системную локаль для выбора кодовой страницы для устаревших архивов zip (!8) ​​· Запросы на слияние · Debian / 7zip · GitLab". GitLab . 22 мая 2024 . Получено 23 мая 2024 .
  65. ^ "Технические подробности zlib" . Получено 10 июля 2019 .
  66. ^ Смит, Эрни (10 июля 2019 г.). «Самая умная „Zip-бомба“ из когда-либо созданных взрывает файл размером 46 МБ до 4,5 петабайт». Motherboard . Vice Media . Получено 10 июля 2019 г.

Внешние ссылки