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-файл правильно идентифицируется по наличию записи конца центрального каталога , которая расположена в конце структуры архива, чтобы обеспечить легкое добавление новых файлов. Если запись конца центрального каталога указывает на непустой архив, имя каждого файла или каталога в архиве должно быть указано в записи центрального каталога вместе с другими метаданными о записи и смещением в 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-байтовой подписью) сразу после сжатых данных:
Запись заголовка файла центрального каталога представляет собой расширенную форму локального заголовка:
После всех записей центрального каталога следует запись конца центрального каталога (EOCD), которая отмечает конец ZIP-файла:
Такой порядок позволяет создать ZIP-файл за один проход, но центральный каталог также помещается в конец файла, чтобы облегчить удаление файлов из многотомных архивов (например, «несколько дискет») , как обсуждалось ранее.
Спецификация формата файла .ZIP документирует следующие методы сжатия: Store (без сжатия), Shrink ( LZW ), Reduce (уровни 1–4; LZ77 + вероятностный), Implode, Deflate, Deflate64, bzip2 , LZMA , Zstandard , WavPack , PPMd и вариант LZ77, предоставленный инструкцией IBM z/OS CMPSC. [35] [27] Наиболее часто используемый метод сжатия — 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 спецификации поля «Метод сжатия» и «Сжатый размер» в локальном заголовке еще не маскируются.
Исходный формат .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]
Для формата 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]
Некоторые реализации 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]
файла ZIP предоставляется бесплатно в общественное достояние и не может быть предметом правовых или моральных претензий со стороны любого лица, организации или компании.
PKWare DCL использует совершенно другой формат сжатых данных, чем PKZIP и zlib. Однако вы можете поискать в каталоге contrib/blast zlib возможное решение вашей проблемы.(вклад/взрыв)
EFS доступна для всех редакций Windows 10, кроме Windows 10 Home.