ZIP-архив
ZIP-архив — это формат сжатия данных и архивации файлов, поддерживающий сжатие без потерь и объединение нескольких файлов в один контейнер. Формат был разработан Филом Кацем для программы PKZIP и впервые опубликован в 1989 году. ZIP является одним из наиболее распространённых форматов архивации, поддерживаемым большинством операционных систем и программ-архиваторов.
История
Предпосылки и создание
В конце 1980-х годов основными форматами сжатия были ARC (программа SEA ARC) и ARJ. Фил Кац, программист из США, создал собственный формат сжатия, который предложил компании SEA (System Enhancement Associates). После отказа SEA использовать его разработку, Кац в 1989 году выпустил программу PKZIP (Pkware ZIP) и спецификацию формата ZIP в открытом доступе. Это позволило другим разработчикам создавать совместимые архиваторы.
Распространение и стандартизация
В 1990-е годы ZIP стал стандартом де-факто для архивации в MS-DOS и ранних версиях Windows. В 1993 году была выпущена версия 2.0, добавившая поддержку сжатия методом Deflate (алгоритм, разработанный Филом Кацем на основе LZ77 и кодирования Хаффмана). В 1997 году компания Microsoft включила поддержку ZIP в Windows 98 через компонент «Сжатые папки». В 2000-х годах формат был стандартизирован как ISO/IEC 21320-1:2015.
Современное состояние
ZIP остаётся одним из самых популярных форматов архивации, несмотря на появление более эффективных форматов (7z, RAR). Он используется в операционных системах (Windows, macOS, Linux), в мобильных платформах (Android, iOS), в форматах документов (Office Open XML, OpenDocument), в Java-архивах (JAR, WAR) и в игровых движках.
Технические характеристики
Структура файла
ZIP-архив состоит из последовательности записей (локальных заголовков), за которыми следуют сжатые или несжатые данные, и центрального каталога (Central Directory), расположенного в конце файла. Каждая запись содержит:
- Сигнатура (4 байта) — идентификатор записи.
- Версия — версия PKZIP, необходимая для распаковки.
- Метод сжатия — 0 (без сжатия), 8 (Deflate), 12 (BZip2), 14 (LZMA), 93 (Zstandard) и другие.
- CRC-32 — контрольная сумма для проверки целостности данных.
- Размеры — сжатый и несжатый размер файла.
- Имя файла — строка в кодировке CP437 или UTF-8 (с флагом Language Encoding Flag).
- Дополнительные поля — метаданные, комментарии, цифровые подписи.
Методы сжатия
- Store (0) — без сжатия, копирование данных.
- Shrink (1) — устаревший метод, основанный на LZW.
- Reduce (2–5) — устаревшие методы с факторизацией.
- Implode (6) — устаревший метод на основе LZ77.
- Deflate (8) — основной метод, использующий LZ77 и кодирование Хаффмана. Обеспечивает хорошее соотношение степени сжатия и скорости.
- Deflate64 (9) — расширение Deflate с большим окном поиска.
- BZip2 (12) — метод на основе блочного сортировочного преобразования Барроуза-Уиллера.
- LZMA (14) — метод с высокой степенью сжатия, используемый в 7z.
- Zstandard (93) — современный метод с высокой скоростью сжатия и распаковки.
Шифрование
ZIP поддерживает несколько методов шифрования:
- Traditional PKWARE Encryption — потоковый шифр на основе псевдослучайной последовательности (считается слабым, взламывается за минуты).
- AES-128/192/256 — шифрование по стандарту Advanced Encryption Standard (WinZip AES). Требует поддержки со стороны архиватора.
- Strong Encryption — расширение PKWARE для шифрования с использованием алгоритмов RC2, RC4, DES, 3DES.
Ограничения
- Максимальный размер архива: 4 ГБ (для стандартного формата) или 16 ЭБ (для формата ZIP64).
- Максимальное количество файлов: 65 535 (стандартный) или 2^64 (ZIP64).
- Имена файлов: до 65 535 байт в UTF-8.
Применение
Операционные системы
- Windows — встроенная поддержка через «Проводник» (сжатые папки).
- macOS — встроенная поддержка через Archive Utility.
- Linux — утилиты командной строки (zip, unzip) и графические архиваторы (File Roller, Ark).
- Android — встроенная поддержка через файловые менеджеры (Files by Google, Solid Explorer).
- iOS — поддержка через приложения (iZip, Documents by Readdle).
Программное обеспечение
- Архиваторы — WinRAR, 7-Zip, PeaZip, Bandizip, WinZip.
- Языки программирования — встроенные библиотеки (Python: zipfile, Java: java.util.zip, .NET: System.IO.Compression).
- Форматы документов — Office Open XML (.docx, .xlsx, .pptx), OpenDocument (.odt, .ods, .odp), Java ARchive (.jar), Web ARchive (.war).
Игровая индустрия
Многие игры используют ZIP для хранения ресурсов (текстур, моделей, звуков) в сжатом виде. Примеры: игры на движках Unity, Unreal Engine, Doom (WAD-архивы, основанные на ZIP).
Интернет и распространение
ZIP-архивы используются для:
- Скачивания файлов с веб-сайтов.
- Распространения программного обеспечения (установщики, портативные версии).
- Отправки вложений по электронной почте (сжатие уменьшает размер).
- Резервного копирования данных.
Преимущества и недостатки
Преимущества
- Универсальность — поддержка во всех операционных системах и большинстве устройств.
- Простота — реализация алгоритмов не требует больших вычислительных ресурсов.
- Совместимость — формат стандартизирован (ISO/IEC 21320-1:2015).
- Многофункциональность — поддержка сжатия, шифрования, цифровых подписей, многотомных архивов.
Недостатки
- Степень сжатия — уступает форматам 7z, RAR, Zstandard (особенно для текстовых данных).
- Шифрование — традиционное шифрование PKWARE уязвимо для атак.
- Поддержка Unicode — реализована не во всех архиваторах (используется флаг Language Encoding Flag).
- Производительность — для больших архивов (сотни тысяч файлов) центральный каталог замедляет распаковку.
Интересные факты
- Формат ZIP был назван в честь концепции «быстрого сжатия» (zip — «молния»).
- Фил Кац умер в 2000 году в возрасте 37 лет от сердечного приступа. Его компания PKWare продолжает существовать.
- В 2015 году ZIP был включён в список стандартов ISO (ISO/IEC 21320-1:2015).
- Формат используется в Android для установки приложений (APK-файлы — это ZIP-архивы).
- В 2017 году была обнаружена уязвимость Zip Slip, позволяющая записывать файлы за пределы целевой директории при распаковке.
Критика и альтернативы
- Безопасность — традиционное шифрование PKWARE считается слабым. Рекомендуется использовать AES-256.
- Эффективность — для больших объёмов данных (гигабайты) форматы 7z (LZMA2) и RAR (RAR5) обеспечивают лучшее сжатие.
- Скорость — для реального времени (например, потоковое сжатие) предпочтительны Zstandard или LZ4.
Источники
- Спецификация формата ZIP (PKWARE Inc., версия 6.3.10, 2021).
- ISO/IEC 21320-1:2015 «Information technology — Document Container File — Part 1: ZIP».
- Статья «A History of ZIP» (IEEE Spectrum, 2019).
- Документация библиотеки Python zipfile (Python Software Foundation).
- Исследование «Zip Slip Vulnerability» (Snyk, 2018).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →