7з
![]() | |
Расширение имени файла | .7z |
---|---|
Тип интернет-СМИ | приложение/x-7z-сжатое |
Единый идентификатор типа (UTI) | org.7-zip.7-zip-архив |
Магическое число | '7', 'z', 0xBC, 0xAF, 0x27, 0x1C |
Ограничение размера | 2 64 байты (примерно 18 эксабайт ) |
Разработано | Igor Pavlov [1] |
Первоначальный выпуск | 1999 год [2] |
Тип формата | Сжатие данных |
Открытый формат ? | Да: Меньшая стандартная общественная лицензия GNU / общественное достояние |
Веб-сайт | 7-молния |
7z — это формат сжатых архивных файлов , который поддерживает несколько различных данных алгоритмов сжатия , шифрования и предварительной обработки . Формат 7z изначально появился как реализованный архиватором 7-Zip . Программа 7-Zip общедоступна на условиях GNU Lesser General Public License . LZMA SDK 4.62 был размещен в свободном доступе в декабре 2008 года. Последней стабильной версией 7-Zip и LZMA SDK является версия 24.05. [2]
Официальная неофициальная спецификация формата файла 7z распространяется вместе с исходным кодом 7-Zip с 2015 года. Спецификацию можно найти в текстовом формате в подкаталоге «doc» дистрибутива исходного кода. [3] Были и дополнительные сторонние попытки написать более конкретную документацию на основе выпущенного кода. [4]
Возможности и улучшения
[ редактировать ]Формат 7z предоставляет следующие основные возможности:
- Открытая модульная архитектура, позволяющая использовать любой метод сжатия, преобразования или шифрования.
- Высокая степень сжатия (в зависимости от используемого метода сжатия).
- AES -256-битное шифрование .
- Шифрование Zip 2.0 (устаревшее)
- Поддержка больших файлов (примерно до 16 эксбибайт или 2 64 байты).
- в Юникоде . Имена файлов
- Поддержка сплошного сжатия , при котором несколько файлов одного типа сжимаются в одном потоке, чтобы использовать комбинированную избыточность, присущую похожим файлам.
- архивов Сжатие и шифрование заголовков .
- Поддержка архивов, состоящих из нескольких частей: например, xxx.7z.001, xxx.7z.002, ... (см. пункты контекстного меню « Разделить файл...» для их создания и «Объединить файлы...» для повторной сборки архива из набор составных файлов компонентов).
- Поддержка библиотек DLL плагинов пользовательских кодеков.
формата Открытая архитектура позволяет добавлять к стандарту дополнительные методы сжатия в будущем.
Методы сжатия
[ редактировать ]В настоящее время определены следующие методы сжатия:
- LZMA – вариант алгоритма LZ77 , использующий скользящий словарь длиной до 4 ГБ для устранения повторяющихся строк. За этапом LZ следует энтропийное кодирование с использованием цепи Маркова на основе кодера диапазона и двоичных деревьев .
- LZMA2 – модифицированная версия LZMA, обеспечивающая лучшую поддержку многопоточности и меньшее расширение несжимаемых данных. [5]
- Bzip2 – стандартный алгоритм преобразования Берроуза – Уиллера . Bzip2 использует два обратимых преобразования; BWT, затем переместите вперед с помощью кодирования Хаффмана для сокращения символов (фактический элемент сжатия).
- PPMd - PPMdH Дмитрия Шкарина 2002 года (PPMII (предсказание путем частичного сопоставления с наследованием информации) и cPPMII (сложный PPMII)) с небольшими изменениями: 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 цели перехода «нормализуются». [5] перед сжатием путем изменения относительного положения на абсолютные значения. Для 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 19 (524288) раз, [6] что вызывает значительную задержку на медленных ПК перед началом сжатия или извлечения. Этот метод называется растяжением ключа и используется для того, чтобы перебора усложнить поиск парольной фразы методом . Современные атаки на основе графического процессора и специальное аппаратное обеспечение ограничивают эффективность этого конкретного метода растяжения ключей. [7] поэтому по-прежнему важно выбрать надежный пароль.Формат 7z предоставляет возможность зашифровать имена файлов архива 7z.
Ограничения
[ редактировать ]Формат 7z не хранит разрешения файловой системы (например, разрешения владельца/группы UNIX или NTFS списки ACL ) и, следовательно, может быть непригоден для целей резервного копирования/архивирования. Обходной путь в UNIX-подобных системах — преобразовать данные в битовый поток tar перед сжатием с помощью 7z. Но GNU tar (распространенный во многих средах UNIX) также может сжимать с помощью алгоритма LZMA2 (« xz »), без использования 7z, с использованием переключателя «-J». Результирующее расширение файла — «.tar.xz» или «.txz», а не «.tar.7z». Этот метод сжатия был принят во многих дистрибутивах для упаковки, таких как Arch, Debian (deb), Fedora (rpm) и Slackware. (Старый формат «lzma» менее эффективен.) [8] С другой стороны, важно отметить, что tar не сохраняет кодировку файловой системы, а это означает, что имена файлов, сжатых tar, могут стать нечитаемыми при распаковке на другом компьютере.
Формат 7z не позволяет извлекать некоторые «битые файлы» — то есть (например) если у вас есть первый сегмент серии файлов 7z, 7z не может дать начало файлов внутри архива — он должен ждать, пока все сегменты загружаются. В формате 7z также отсутствуют записи восстановления, что делает его уязвимым для деградации данных , если он не используется в сочетании с внешними решениями, такими как архивы , или внутри файловых систем с надежной коррекцией ошибок . Для сравнения, в zip- файлах также отсутствует функция восстановления, в то время как в формате RAR она есть.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Несколько вопросов Игорю Павлову» . Информационный бюллетень доктора Добба по сжатию данных. 30 апреля 2003 г. Архивировано из оригинала 28 октября 2008 г. Проверено 26 декабря 2009 г.
- ^ Перейти обратно: а б «История изменений 7-zip» . Архивировано из оригинала 27 февраля 2015 года . Проверено 10 июня 2010 г.
- ^ LZMA SDK, каталог «DOC», 7zFormat.txt
- ^ «Спецификация формата .7z — py7zr — библиотека архивов 7-zip» . py7zr.readthedocs.io .
- ^ Перейти обратно: а б Коллин, Лассе. "лзма_.лзма" . привязки liblzma . Архивировано из оригинала 8 февраля 2010 года . Проверено 3 января 2010 г.
По сравнению с LZMA1, в LZMA2 добавлена поддержка LZMA_SYNC_FLUSH, несжатые фрагменты (меньшее расширение при попытке сжатия несжимаемых данных), возможность изменения lc/lp/pb в середине кодирования и некоторые другие внутренние улучшения.
- ^ «Исходный код 7-zip» . Архивировано из оригинала 22 марта 2019 года . Проверено 23 марта 2018 г.
- ^ Колин Персиваль . сценарий. Архивировано 28 мая 2019 года в Wayback Machine .Как представлено в «Более надежный вывод ключей с помощью последовательных функций с жесткой памятью». Архивировано 14 апреля 2019 г. на Wayback Machine .представлено на BSDCan'09, май 2009 г.
- ^ «GNU tar 1.34: 8.1 Использование меньшего пространства за счет сжатия» . Архивировано из оригинала 2 апреля 2015 года . Проверено 17 марта 2015 г.
Дальнейшее чтение
[ редактировать ]- Саломон, Дэвид (2007). Сжатие данных: полный справочник . Спрингер. п. 241. ИСБН 978-1-84628-602-5 .