7z - это формат сжатого архивного файла, который поддерживает несколько различных алгоритмов сжатия , шифрования и предварительной обработки данных. Формат 7z изначально появился как реализованный архиватором 7-Zip . Программа 7-Zip является общедоступной на условиях Стандартной общественной лицензии ограниченного применения GNU . LZMA SDK 4.62 был размещен в открытом доступе в декабре 2008 года. Последней стабильной версией 7-Zip и LZMA SDK является версия 19.00. [2]
Расширение имени файла | .7z |
---|---|
Тип интернет-СМИ | приложение / x-7z-сжатый |
Единый идентификатор типа (UTI) | org.7-zip.7-zip-архив |
Магическое число | '7', 'z', 0xBC, 0xAF, 0x27, 0x1C |
Разработано | Игорь Павлов [1] |
Первый выпуск | 1999 [2] |
Тип формата | Сжатие данных |
Открытый формат ? | Да: Стандартная общественная лицензия ограниченного применения GNU / общественное достояние |
Веб-сайт | 7-zip |
Спецификация формата файла 7z распространяется с исходным кодом 7-Zip. Спецификацию можно найти в текстовом формате в подкаталоге 'doc' дистрибутива исходного кода.
Особенности и улучшения
Формат 7z предоставляет следующие основные функции:
- Открытая модульная архитектура, которая позволяет объединять любые методы сжатия, преобразования или шифрования.
- Высокая степень сжатия (в зависимости от используемого метода сжатия).
- Шифрование AES- 256 .
- Поддержка больших файлов (примерно до 16 эксбибайт или 2 64 байта).
- Имена файлов Unicode .
- Поддержка твердого сжатия , при котором несколько файлов одинакового типа сжимаются в одном потоке, чтобы использовать комбинированную избыточность, присущую аналогичным файлам.
- Сжатие и шифрование заголовков архивов .
- Поддержка составных архивов: например, xxx.7z.001, xxx.7z.002, ... (см. Пункты контекстного меню Разделить файл ..., чтобы создать их, и Объединить файлы ..., чтобы повторно собрать архив из набор составных файлов компонентов).
- Поддержка пользовательских DLL плагинов кодеков.
Открытая архитектура формата позволяет в будущем добавлять к стандарту дополнительные методы сжатия.
Методы сжатия
В настоящее время определены следующие методы сжатия:
- LZMA - вариант алгоритма LZ77 , использующий скользящий словарь длиной до 4 ГБ для исключения повторяющихся строк. За этапом LZ следует энтропийное кодирование с использованием дальномера на основе цепей Маркова и двоичных деревьев .
- LZMA2 - модифицированная версия LZMA, обеспечивающая лучшую поддержку многопоточности и меньшее расширение несжимаемых данных. [3]
- Bzip2 - стандартный алгоритм преобразования Барроуза – Уиллера . Bzip2 использует два обратимых преобразования; ЛОВ, а затем Переместить на передний план с кодирования Хаффмана для уменьшения символа (фактический элемент сжатия).
- PPMd - PPMdH Дмитрия Шкарина 2002 г. (PPMII / cPPMII) с небольшими изменениями: PPMII - это улучшенная версия алгоритма сжатия PPM 1984 г. (прогнозирование путем частичного сопоставления).
- DEFLATE - Стандартный алгоритм, основанный на кодировании 32 кБ LZ77 и Хаффмана . Deflate находится в нескольких форматах файлов, включая ZIP , gzip , PNG и PDF . 7-Zip содержит созданный с нуля кодировщик DEFLATE, который часто превосходит де-факто стандартную версию zlib по размеру сжатия, но за счет использования ЦП.
Набор инструментов повторного сжатия под названием AdvanceCOMP содержит копию кодировщика DEFLATE из реализации 7-Zip; эти утилиты часто можно использовать для дальнейшего сжатия существующих файлов gzip , ZIP , PNG или MNG .
Фильтры предварительной обработки
LZMA SDK поставляется с включенными препроцессорами BCJ и BCJ2 , так что на более поздних этапах можно достичь большего сжатия: для процессоров x86 , ARM , PowerPC (PPC), IA-64 Itanium и ARM Thumb цели перехода «нормализованы» [ 3] перед сжатием путем изменения относительного положения на абсолютные значения. Для x86 это означает, что ближние переходы, вызовы и условные переходы (но не короткие переходы и условные переходы) преобразуются из нотации стиля «переход на 1655 байт назад» машинного языка в нормированную нотацию стиля «переход к адресу 5554»; все переходы к 5554, возможно, к общей подпрограмме, таким образом, кодируются одинаково, что делает их более сжимаемыми.
- BCJ - Конвертер 32-битных исполняемых файлов x86. Нормализовать целевые адреса ближайших прыжков и вызовов с относительных расстояний до абсолютных пунктов назначения.
- BCJ2– препроцессор для 32-битных исполняемых файлов x86. BCJ2 - это усовершенствование BCJ, добавляющее дополнительную обработку инструкций перехода / вызова x86. Ближний прыжок, ближний вызов, условные цели ближнего прыжка разделяются и сжимаются отдельно в другом потоке.
- Дельта-кодирование - дельта-фильтр, базовый препроцессор мультимедийных данных.
Аналогичная технология предварительной обработки исполняемых файлов включена в другое программное обеспечение; RAR компрессор оснащен смещения сжатия для 32-разрядных x86 исполняемых файлов и IA-64 исполняемых файлов, а UPX выполнения компрессор исполняемых файлов включает в себя поддержку для работы с 16-битными значениями в пределах DOS бинарных файлов.
Шифрование
Формат 7z поддерживает шифрование с помощью алгоритма AES с 256-битным ключом. Ключ генерируется из введенной пользователем парольной фразы с использованием алгоритма, основанного на хэш-функции SHA-256 . SHA-256 выполняется 2 18 (262144) раз, [4] , который вызывает значительную задержку на медленных ПК перед сжатием или экстракции начинается. Этот метод называется растягиванием ключа и используется для затруднения поиска парольной фразы методом перебора . Современные атаки с использованием графических процессоров и специализированное оборудование ограничивают эффективность этого конкретного метода растягивания ключей [5], поэтому по-прежнему важно выбрать надежный пароль. Формат 7z предоставляет возможность зашифровать имена файлов архива 7z.
Ограничения
Формат 7z не хранит разрешения файловой системы (такие как права владельца / группы UNIX или списки контроля доступа NTFS ) и, следовательно, может не подходить для целей резервного копирования / архивирования. Для решения этой проблемы в UNIX-подобных системах можно преобразовать данные в битовый поток tar перед сжатием с помощью 7z. Но стоит отметить, что GNU tar (распространенный во многих средах UNIX) также может сжиматься с алгоритмом LZMA изначально, без использования 7z, и что в этом случае предлагаемое [6] расширение файла для архива - ".tar. lzma »(или просто« .tlz »), а не« .tar.7z ». С другой стороны, важно отметить, что tar не сохраняет кодировку файловой системы, а это означает, что сжатые с помощью tar имена файлов могут стать нечитаемыми при распаковке на другом компьютере. Также можно использовать LZMA2, запустив его через инструмент xz . Последние версии GNU tar поддерживают переключатель, который запускает TAR через XZ. Расширение файла - «.tar.xz» или «.txz». Этот метод сжатия был принят во многих дистрибутивах для упаковки, таких как Arch, Debian (deb), Fedora (rpm) и Slackware.-J
Формат 7z не позволяет извлекать некоторые «поврежденные файлы», то есть (например), если у кого-то есть первый сегмент серии файлов 7z, 7z не может дать начало файлам в архиве - он должен ждать, пока все скачиваются сегменты. В формате 7z также отсутствуют записи восстановления, что делает его уязвимым для деградации данных, если он не используется вместе с внешними решениями, такими как parchives , или в файловых системах с надежным исправлением ошибок . Для сравнения, в zip- файлах также отсутствует функция восстановления.
Смотрите также
- Сравнение форматов архивов
- Список форматов архивов
- Свободный формат файла
- Открытый формат
Рекомендации
- ^ "Несколько вопросов Игорю Павлову" . Информационный бюллетень доктора Добба по сжатию данных. 30 апреля 2003 . Проверено 26 декабря 2009 года .
- ^ a b История изменений 7-zip
- ^ а б Коллин, Лассе. "lzma_.lzma" . привязки liblzma . Архивировано 8 февраля 2010 года . Проверено 3 января 2010 года .
По сравнению с LZMA1, LZMA2 добавляет поддержку LZMA_SYNC_FLUSH, несжатых фрагментов (меньшее расширение при попытке сжатия несжимаемых данных), возможность изменения lc / lp / pb в середине кодирования и некоторые другие внутренние улучшения.
- ^ 7-zip исходный код
- ^ Колин Персиваль . scrypt . Как представлено в разделе «Более сильное получение ключа с помощью последовательных функций с жесткой памятью» . представлена на BSDCan'09, май 2009 г.
- ^ https://www.gnu.org/software/tar/manual/html_section/Compression.html
дальнейшее чтение
- Саломон, Дэвид (2007). Сжатие данных: полный справочник . Springer. п. 241. ISBN. 978-1-84628-602-5.
Внешние ссылки
- Официальный веб-сайт
- 7z на SourceForge.net