ZIP-файл: что это такое, как работает и почему не всегда сжимает файлы

ZIP это формат архива, в котором можно хранить один или несколько файлов и папок, обычно со сжатием. Его придумал Фил Кац в 1989 году, и с тех пор ZIP остаётся самым распространённым форматом архивов.

Чем удобен ZIP

  • Сжатие. Файлы занимают меньше места, чаще всего за счёт алгоритма Deflate.
  • Объединение. Множество файлов со структурой папок упаковывается в один.
  • Поддержка везде. Windows, macOS и большинство окружений Linux открывают ZIP встроенными средствами.
  • Хранение без сжатия. Файлы можно добавлять как есть.
  • Шифрование. Архив можно защитить паролем, но с оговорками, о них ниже.

На ZIP основаны и другие форматы: документы DOCX, XLSX, ODT, пакеты Java JAR, Android APK и EPUB по сути являются ZIP-архивами со своей структурой.

Как открыть и создать ZIP

Windows. Двойной щелчок открывает архив как папку. Создать архив: выделить файлы, правая кнопка мыши, «Отправить» → «Сжатая ZIP-папка» (в Windows 11 пункт «Сжать в ZIP-файл»).

macOS. Двойной щелчок распаковывает. Создать: правая кнопка → «Сжать».

Linux. В терминале:

unzip файл.zip
zip -r архив.zip папка/

Если команд нет, установите пакеты zip и unzip. Подробнее о других форматах архивов в статье об архивации в Linux.

Android и iOS. Встроенные файловые менеджеры открывают ZIP, для сложных случаев есть ZArchiver и аналоги.

Как работает сжатие Deflate

Deflate это алгоритм сжатия без потерь, который сочетает два метода.

### 1. LZ77: замена повторов ссылками

Алгоритм ищет фрагменты, которые уже встречались раньше в пределах окна (в Deflate до 32 КБ назад), и заменяет повтор ссылкой вида «вернуться на D байт назад и скопировать L байт».

Пример. Строка из 18 символов:

ABABABABABABABABAB

После LZ77 получится:

A B <расстояние 2, длина 16>

Первые два символа записываются как есть, а дальше одна ссылка говорит: «отступи на 2 символа назад и скопируй 16». Копирование может перекрываться с уже записанным текстом, поэтому так кодируются длинные повторы.

### 2. Коды Хаффмана

Затем символы и ссылки кодируются кодами разной длины: частые получают короткие коды, редкие длинные. Например, если буква «о» встречается в тексте очень часто, ей может достаться код из 2 или 3 бит вместо 8.

Вместе эти шаги хорошо сжимают текст, логи, исходный код, таблицы и дампы баз данных.

Как устроен ZIP-файл

  • Локальные заголовки. Перед данными каждого файла: имя, размеры, метод сжатия, контрольная сумма CRC-32.
  • Данные. Сжатое или несжатое содержимое файла.
  • Центральный каталог. Список всех файлов в конце архива с указанием, где каждый лежит.
  • Запись о конце центрального каталога. Самый последний блок, по которому программа находит каталог.

Благодаря каталогу в конце можно быстро посмотреть список файлов и извлечь один файл, не распаковывая весь архив. Каждый файл сжимается отдельно, поэтому ZIP хуже сжимает много мелких похожих файлов, чем «сплошные» архивы вроде .tar.xz или 7z в solid-режиме.

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

  • Store: без сжатия.
  • Deflate: стандартный и самый совместимый.
  • Deflate64: улучшенный вариант с большим окном.
  • BZIP2: обычно сжимает лучше Deflate, но медленнее.
  • LZMA: заметно лучше Deflate, тот же алгоритм, что в 7z.
  • Zstandard и PPMd: поддерживаются спецификацией, но не всеми программами.

Для совместимости почти всегда используется Deflate. Архив с LZMA или Zstandard может не открыться встроенными средствами Windows или macOS.

Шифрование

Классическое шифрование ZIP (ZipCrypto) слабое и взламывается известными атаками. Если нужна настоящая защита, используйте AES-256: например, в 7-Zip при создании ZIP-архива выберите метод шифрования AES-256. Учтите, что имена файлов в ZIP при этом не шифруются, а встроенные средства Windows такие архивы открыть не могут.

Почему ZIP не всегда уменьшает файлы

Сжатие без потерь работает за счёт избыточности: повторов и неравномерности символов. Если избыточности нет, сжимать нечего. Плохо сжимаются:

  • JPEG, PNG, MP3, MP4, WebP: эти форматы уже сжаты;
  • зашифрованные файлы: хорошее шифрование делает данные похожими на случайные;
  • другие архивы ZIP, RAR, 7z.

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

7z или RAR тоже не сожмут JPEG или MP4 заметно лучше: дело не в алгоритме, а в самих данных. Зато на тексте и коде они действительно обычно выигрывают у ZIP.

Заключение

ZIP прост, совместим и поддерживается везде. Он хорошо сжимает текстовые данные и код, но бесполезен для уже сжатых медиафайлов. Для максимального сжатия больших текстовых наборов выбирайте 7z или tar.xz, а для обмена файлами с кем угодно ZIP остаётся лучшим выбором. Если WordPress ругается на ZIP-архив при загрузке, загляните в статью об ошибке «Архив несовместим».

Источники и ссылки


Комментарии загружаются…