aspose.info
RU

ЗИП

Обновлено

Что такое ZIP-файл?

Файл с расширением .zip — это архив, который может содержать один или несколько файлов или каталогов. Архив может иметь сжатие, примененное к включенным файлам, чтобы уменьшить размер ZIP-файла. Формат файла ZIP был обнародован еще в феврале 1989 года Филом Кацем для архивирования файлов и папок. Формат стал частью утилиты PKZIP, созданной PKWARE, Inc. Сразу после появления доступных спецификаций, многие компании сделали формат файла ZIP частью своих программных утилит, включая Microsoft (начиная с Windows 7), Apple (Mac OS X) и многие другие.

Краткая история формата ZIP-файла

История формата файла ZIP восходит к судебному иску, поданному компанией System Enhancement Associates (SEA) против PKWARE за использование утилиты ARC без разрешений на ее товарный знак и авторских прав на внешний вид продукта и пользовательский интерфейс. До этого Фил Кац переписал исходный код SEA и выпустил PKXARC, экстрактор ARC, и PKARC, компрессор файлов, в качестве бесплатного программного обеспечения для систем на базе MS-DOS. Проиграв судебный процесс, PKWARE больше не могла использовать что-либо, связанное с ARC. Именно здесь появилось новое сжатие файлов, названное ZIP, которое стало частью утилиты PKZIP в PKWARE, Inc.

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

Поддерживаемые методы сжатия в ZIP

В соответствии со спецификациями формата файла .ZIP поддерживаются следующие методы сжатия.

  • Магазин - подразумевает отсутствие сжатия
  • Сокращаться, сжиматься
  • Сокращение (это подразумевает коэффициенты сжатия в диапазоне от уровня 1 до уровня 4)
  • Взрыв
  • Выкачать
  • Дефлат64
  • BZIP2
  • ЛЗМА (ЭФС)
  • WavPack
  • PPMd версия I, ред. 1

DEFLATE — это широко используемый метод сжатия, представляющий собой алгоритм сжатия данных без потерь, использующий комбинацию кодирования LZ77 и Хаффмана и подробно описанный в RFC 1951.

Спецификации формата ZIP-файла

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

Общий формат файла ZIP

Каждый Zip-файл структурирован следующим образом:

Формат ZIP-файла
Заголовок локального файла 1
Данные файла 1
Дескриптор данных 1
Заголовок локального файла 2
Файл данных 2
Дескриптор данных 2
….
….
Заголовок локального файла N
Файл данных N
Дескриптор данных N
Заголовок расшифровки архива
Архивировать дополнительную запись данных
Центральный каталог

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

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

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

Записи ZIP-файла

Записи в ZIP-файле расположены друг за другом, где каждая запись состоит из:

  • Заголовок локального файла
  • Необязательные дополнительные поля данных
  • Пользовательские данные (опционально сжатые/опционально зашифрованные)

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

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

Заголовок локального файла имеет определенную структуру полей, состоящую из многобайтовых значений. Все значения хранятся в порядке байтов с прямым порядком байтов, где длина поля рассчитывается как длина в байтах. Все структуры ZIP-файла используют 4-байтовые подписи для каждой записи файла. Конец подписи центрального каталога — 0x06054b50, и его можно отличить по собственной уникальной подписи. Ниже приведен порядок информации, хранящейся в заголовке локального файла.

СмещениеБайтыОписание
04Подпись заголовка локального файла # 0x04034b50 (читается как прямой порядок байтов)
42Версия, необходимая для извлечения (минимум)
62Битовый флаг общего назначения
82Метод сжатия
102Время последней модификации файла
122Дата последнего изменения файла
144CRC-32
184Сжатый размер
224Размер без сжатия
262Длина имени файла (n)
282Дополнительная длина поля (м)
30nИмя файла
30+nmДополнительное поле

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

СмещениеБайтыОписание
04Подпись заголовка файла центрального каталога # 0x02014b50
42Версия сделана
62Версия, необходимая для извлечения (минимум)
82Битовый флаг общего назначения
102Метод сжатия
122Время последней модификации файла
142Дата последнего изменения файла
164CRC-32
204Сжатый размер
244Размер без сжатия
282Длина имени файла (n)
302Дополнительная длина поля (м)
322Длина комментария файла (k)
342Номер диска, на котором начинается файл
362Внутренние атрибуты файла
384Внешние атрибуты файла
424Относительное смещение заголовка локального файла. Это количество байтов между началом первого диска, на котором находится файл, и началом заголовка локального файла. Это позволяет программному обеспечению, считывающему центральный каталог, определять положение файла внутри ZIP-файла.
46nИмя файла
46+nmДополнительное поле
46+n+mkКомментарий к файлу

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

СмещениеБайтыОписание
04Конец подписи центрального каталога # 0x06054b50
42Номер этого диска
62Диск, на котором начинается центральный каталог
82Количество записей центрального каталога на этом диске
102Общее количество записей центрального каталога
124Размер центрального каталога (байты)
164Смещение начала центрального каталога относительно начала архива
202Длина комментария (n)
22nКомментарий

использованная литература

См. также