7z

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

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

Специфікація формату 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-файлах також відсутня функція відновлення.

Примітки[ред. | ред. код]

Посилання[ред. | ред. код]