7z

формат стиснення файлів в архів

7z — формат стиснення файлів в архів, підтримує декілька різних алгоритмів стиснення, шифрування і попередньої обробки даних. Формат 7z спочатку був випущений в архіваторі 7-Zip. Програма 7-Zip загальнодоступна на умовах ліцензії GNU LGPL. LZMA SDK 4.62 був розміщений у відкритому доступі в грудні 2008 року. Остання стабільна версія 7-Zip і LZMA SDK — версія 19.00.

7z
Розширення файлу: .7z[1]
MIME-тип: application/x-7z-compressed[2]
Узагальнений ідентифікатор типу: org.7-zip.7-zip-archive
Магічне число: '7', 'z', 0xBC, 0xAF, 0x27, 0x1C
Рік випуску: 1999[3]
Тип формату: стиснення даних

Специфікація формату 7z поширюється з початковим кодом 7-Zip. Специфікацію можна знайти в текстовому форматі в підкаталозі 'doc' дистрибутива початкового коду.

Особливості та поліпшення ред.

Формат 7z забезпечує такі основні функції:

  • Відкрита модульна архітектура, яка дозволяє використовувати будь-який метод стискування, перетворення або шифрування.
  • Високі коефіцієнти стиснення (залежно від використовуваного методу стиснення).
  • AES-256-шифрування.
  • Підтримка великих файлів (приблизно до 16 ексбібайт, або 264 байт).
  • Імена файлів Юнікод.
  • Підтримка безперервного стиснення, за якого кілька файлів однакового типу стискаються в одному потоці, щоб використовувати об'єднану надмірність, притаманну файлам.
  • Стиснення і шифрування заголовків архіву.
  • Підтримка архівів, що складаються з декількох частин: наприклад, 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 це означає, що близькі переходи, виклики та умовні переходи (але не короткі переходи і умовні переходи) перетворюються з машинної мови «перейти на 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 виконується 218 (262144) разів, що викликає значну затримку на малопродуктивних ПК перед початком стиснення або вилучення. Цей метод називається розтягуванням клавіш і використовується для ускладнення пошуку парольної фрази. Поточні атаки на основі графічного процесора і користувацькі апаратні засоби обмежують ефективність цього методу розтягання ключа. Тому все ще важливо вибрати надійний пароль. Формат 7z дозволяє шифрувати імена файлів архіву 7z.

Формати ред.

Формат 7z не зберігає прав доступу файлової системи (наприклад, прав доступу власника / групи UNIX або списків ACL NTFS) і, отже, може не підходити для цілей резервного копіювання / архівування. Обхідним шляхом в UNIX-подібних системах для цього є перетворення даних на потік бітів tar перед стисненням в 7z. Але варто відзначити, що GNU tar (поширений у багатьох середовищах UNIX) також може стискати за допомогою алгоритму LZMA без використання 7z, в цьому випадку використовується розширення назви файла архіву «.tar.lzma» (або просто «.tlz»), а не «.tar.7z». З іншого боку, важливо відзначити, що tar не зберігає кодування файлової системи, тому стиснуті в tar-файли назви файлів можуть бути спотворені, якщо їх розпакувати на іншому комп'ютері. Також можна використовувати LZMA2, запустивши його через інструмент xz. Останні версії GNU tar підтримують комутатор -J, який запускає TAR через XZ. Розширення файлу: «.tar.xz» або «.txz». Цей метод стиснення був прийнятий для паукунків у багатьох дистрибутивах, таких як Arch Linux, Debian (deb), Fedora (rpm) і Slackware.

Формат 7z не дозволяє видобувати деякі «зіпсовані файли». Наприклад, якщо у вас є перший сегмент серії файлів 7z, 7z не може дати початок файлів всередині архіву — він повинен чекати, поки завантажаться всі сегменти. У форматі 7z також відсутні дані для відновлення, що робить його вразливим щодо деградації даних, якщо тільки він не використовується спільно з зовнішніми рішеннями, такими як архіви, або в складі файлових систем з надійним виправленням помилок. Для порівняння, в zip-файлах також відсутня функція відновлення.

Примітки ред.

Посилання ред.