7z — Википедия

7z
Расширение .7z[2]
MIME-тип application/x-7z-compressed[3]
Сигнатура '7', 'z', 0xBC, 0xAF, 0x27, 0x1C
Разработчик Павлов, Игорь Викторович[d]
Опубликован 1999[1]
Тип формата Сжатие данных
Открытый формат? Да: GNU Lesser General Public License
Сайт 7-zip.org/7z.html (англ.)

7z — формат сжатия файлов в архив, поддерживающий несколько различных алгоритмов сжатия, шифрования и предварительной обработки данных. Формат 7z изначально был выпущен как архиватор 7-Zip. Программа 7-Zip общедоступна в соответствии с условиями GNU Lesser General Public License. LZMA SDK 4.62 был размещён в открытом доступе в декабре 2008 года. Последняя стабильная версия 7-Zip и LZMA SDK — версия 23.01.

Спецификация формата файла 7z распространяется с исходным кодом 7-Zip. Спецификацию можно найти в текстовом формате в подкаталоге 'doc' дистрибутива исходного кода.

Особенности и улучшения[править | править код]

Формат 7z обеспечивает следующие основные функции:

  • Открытая модульная архитектура, которая позволяет использовать любой метод сжатия, преобразования или шифрования.
  • Высокие коэффициенты сжатия (в зависимости от используемого метода сжатия).
  • AES 256-битное шифрование.
  • Поддержка больших файлов (примерно до 16 эксбибайт, или 264 байта).
  • Имена файлов Unicode.
  • Поддержка сплошного сжатия, при котором несколько файлов одинакового типа сжимаются в одном потоке, чтобы использовать объединённую избыточность, присущую аналогичным файлам.
  • Сжатие и шифрование заголовков архива.
  • Поддержка архивов, состоящих из нескольких частей: например, xxx.7z.001, xxx.7z.002, … (см. Пункты контекстного меню «Разделить файл …», чтобы создать их, и « Объединить файлы …», чтобы повторно собрать архив из набора многокомпонентных файлов компонентов).
  • Поддержка пользовательских библиотек плагинов кодеков.

Открытая архитектура формата позволяет добавлять в стандарт дополнительные будущие методы сжатия.

Методы сжатия[править | править код]

В настоящее время определены следующие методы сжатия:

  • LZMA — вариант алгоритма, использующий словарь объёмом до 4 ГБ. За этапом LZ следует энтропийное кодирование с использованием интервального кодирования на основе цепей Маркова и двоичных деревьев.
  • LZMA2 — модифицированная версия LZMA, это сжатие обеспечивающее лучшую поддержку многопоточности и меньшее расширение несжимаемых данных.
  • Bzip2 — стандартный алгоритм преобразования Барроуза-Уилера. Bzip2 использует два обратимых преобразования; BWT, затем — Move-To-Front с кодированием Хаффмана для уменьшения символов (фактический элемент сжатия).
  • PPMd — PPMdH Дмитрия Шкарина 2002 года (PPMII / cPPMII) с небольшими изменениями: PPMII — улучшенная версия алгоритма сжатия PPM 1984 года (прогнозирование путём частичного сопоставления).
  • DEFLATE — стандартный алгоритм, основанный на кодировании LZ77 32 кБ и кодировании Хаффмана. Deflate встречается в нескольких форматах файлов, включая ZIP, gzip, PNG и PDF. 7-Zip содержит кодер DEFLATE с нуля.

Набор инструментов повторного сжатия, называемый AdvanceCOMP, содержит копию кодера DEFLATE из реализации 7-Zip; Эти утилиты можно использовать для дальнейшего сжатия размера существующих файлов gzip, ZIP, PNG или MNG.

Фильтры предварительной обработки[править | править код]

LZMA SDK поставляется с включёнными препроцессорами BCJ и BCJ2, так что на более поздних этапах может достигаться большее сжатие: для процессоров x86, ARM, PowerPC (PPC), IA-64 Itanium и ARM Thumb цели перехода «нормализованы» до сжатия путём изменения относительного положения в абсолютные значения. Для x86 это означает, что ближние переходы, вызовы и условные переходы (но не короткие переходы и условные переходы).

  • BCJ — конвертер для 32-битных файлов x86.
  • BCJ2 — препроцессор для 32-битных файлов x86. BCJ2 является улучшением BCJ, добавляя дополнительную обработку команд перехода / вызова x86. Ближний прыжок, ближний вызов, условные ближние прыжки цели разделяются и сжимаются отдельно в другом потоке.
  • Дельта-кодирование — дельта-фильтр, базовый препроцессор для мультимедийных данных.

Подобная исполняемая технология предварительной обработки включена в другое программное обеспечение; RAR компрессор оснащён смещением сжатия для 32-разрядных x86 исполняемых файлов и IA-64 исполняемых файлов, а UPX выполнения компрессор исполняемых файлов включает в себя поддержку для работы с 16-битными значениями в пределах DOS-бинарных файлов.

Шифрование[править | править код]

Формат 7z поддерживает шифрование по алгоритму AES с 256-битным ключом. Ключ генерируется из предоставленной пользователем парольной фразы с использованием алгоритма, основанного на хэш-функции SHA-256. SHA-256 выполняется 218 (262144) раз, что вызывает значительную задержку на низкопроизводительных ПК перед началом сжатия или извлечения. Этот метод называется растяжением ключа и используется для более сложного поиска парольной фразы. Текущие атаки на основе графического процессора и пользовательские аппаратные средства ограничивают эффективность этого конкретного метода растяжения ключа. поэтому всё ещё важно выбрать надёжный пароль. Формат 7z позволяет шифровать имена файлов архива 7z.

Форматы[править | править код]

Формат 7z не хранит разрешения файловой системы (например, разрешения владельца / группы UNIX или списки ACL NTFS) и, следовательно, может не подходить для целей резервного копирования / архивирования. Есть обходной путь в UNIX-подобных системах. Для этого необходимо преобразовать данные в поток битов tar перед сжатием в 7z. Но стоит отметить, что GNU tar (распространённый во многих средах UNIX) также может сжимать с помощью алгоритма LZMA2 через инструмент xz, без использования 7z, используя -J коммутатор. Итоговое расширение файла — «.tar.xz» или «.txz», а не «.tar.7z». Этот метод сжатия для запаковки был принят во многих дистрибутивах, таких как Arch Linux, Debian (deb), Fedora (rpm) и Slackware. Старый формат LZMA менее эффективен. Важно отметить, что tar не сохраняет кодировку файловой системы. Это означает, что сжатые tar имена файлов могут стать нечитаемыми при распаковке на другом компьютере.

Формат 7z не позволяет извлекать некоторые битые файлы. Например, если у вас есть первый сегмент серии файлов 7z, то 7z не может дать начало файлам в архиве, так как он должен ждать, пока все сегменты загрузятся. В формате 7z также отсутствуют записи для восстановления, что делает его уязвимым для деградации данных, если он не используется в сочетании с внешними решениями, такими как Parchive[en], или в файловых системах с надёжным исправлением ошибок. Для сравнения, в zip-файлах также отсутствует функция восстановления, в то время как в формате rar она есть.

Примечания[править | править код]

Ссылки[править | править код]

7-zip.org/7z.html — официальный сайт 7z