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-архив при загрузке, загляните в статью об ошибке «Архив несовместим».