Архів BZIP2 (.bz2)
Відкритий СтандартBzip2 (BZ2): це класична вільна від патентів утиліта стиснення та формат файлів для Unix, створені Джуліаном Сьюардом (Julian Seward). Формат використовує перетворення Берроуза-Вілера для досягнення значно вищого ступеня стиснення, ніж класичний Gzip.
Аналіз та метадані
Операційні системи та аналізатори файлів ідентифікують файли BZ2, перевіряючи початкову послідовність бінарних байтів:
Сигнатура заголовка на байтовому рівні (Magic Bytes)
Операційні системи та аналізатори файлів ідентифікують файли BZ2, перевіряючи початкову послідовність бінарних байтів:
ШІСТНАДЦЯТКОВА СИГНАТУРА (ЗСУВ 0):
42 5A 68ПОДАННЯ В ASCII: BZh
Стандартизація: Відкритий стандарт Bzip2
Технічні характеристики
| Архітектура контейнера | Заголовок потоку ('BZh' + цифра розміру блоку 1-9), за яким ідуть стиснені блоки даних і 32-розрядна контрольна сума CRC |
| Стиснення | Перетворення Берроуза-Вілера (BWT), перетворення «переміщення на початок списку» (MTF) та кодування Хаффмана |
| Порядок байтів (Endianness) | Бітовий потік із порядком байтів від старшого до молодшого (Big-Endian) |
| Колірні простори | Не застосовується (потік байтового стиснення) |
| Канали та структура | Потік стиснених байтів одного файлу |
| Максимальні розміри | Необмежена довжина потоку (підтримуються довільні розміри файлів) |
| Прозорість | 100% точне збереження даних без втрат |
| Потокове та прогресивне завантаження | Послідовне потокове передавання поблочно з незалежними контрольними сумами CRC для кожного блоку |
Технічна матриця порівняння: BZ2 проти конкурентів
| Технічний атрибут | BZ2 (Поточний) | GZ | XZ | ZSTD |
|---|---|---|---|---|
| Основний алгоритм | Перетворення Берроуза-Вілера (BWT) | Deflate (LZ77 + Хаффман) | LZMA / LZMA2 | Скінченно-станова ентропія + LZ77 |
| Стиснення порівняно з Gzip | На 10-20 % менший розмір, ніж після стиснення Gzip | Базовий стандарт | На 20-30 % менший розмір, ніж у Gzip | На 10-20 % менший розмір, ніж у Gzip |
| Швидкість розпакування | Повільна (~30-50 МБ/с) | Швидка (~300 МБ/с) | Помірна (~100 МБ/с) | Вкрай висока (>1.5 ГБ/с) |
| Контрольні суми блоків | 32-розрядний CRC для кожного блоку | CRC32 для всього потоку | CRC64 потоку | xxHash64 потоку |
Типові режими пошкодження та посібник з відновлення в шістнадцятковому форматі
Витягнення переривається помилкою 'bzip2: Data integrity error when decompressing'.
Першопричина: Змінений біт у стисненому блоці, через що обернена матриця перестановки BWT не проходить перевірку CRC32.
Відновлення: Використовуйте утиліту 'bzip2recover' для відновлення неушкоджених блоків навколо пошкодженого сектору.
Аналіз безпеки та векторів атак на парсери
Реалізації Bzip2 включають складне сортування бітових потоків та синтаксичний аналіз таблиць Хаффмана, які історично мали вразливості цілочисельного переповнення.
Відомі вектори атак
- Цілочисельне переповнення під час виділення масиву сортування BWT (наприклад, CVE-2016-3189).
- Запис за межі буфера під час побудови таблиці декодування Хаффмана.
- Відмова в обслуговуванні через патологічні вхідні патерни, що спричиняють найгірший квадратичний час сортування BWT.
Рекомендації щодо захисту: Декодуйте файли BZ2 за допомогою безпечних для пам'яті декодерів WASM із примусовим обмеженням меж пам'яті.
Історичне походження та віхи
Основні переваги
- Стабільно забезпечує на 10-20 % краще стиснення архівів вихідного коду, системних журналів і текстових баз даних, ніж класичний Gzip.
- Незалежна блочна архітектура (від 100k до 900k) містить 32-бітні контрольні суми CRC для кожного блоку для надійної перевірки цілісності.
- Доступний як вбудована утиліта в багатьох дистрибутивах Linux, BSD і macOS; наявність залежить від дистрибутива.
Технічні обмеження та недоліки
- Значно нижча швидкість стиснення та розпакування порівняно з сучасними алгоритмами, такими як Zstandard.
- Стиснення лише одного файлу: вимагає поєднання з TAR (.tar.bz2) для пакування кількох файлів або каталогів.
- Вище споживання процесора під час розпакування порівняно з Gzip або Zstd.
Цікаві технічні факти
- Магічні байти 'BZh' означають 'Burrows-Wheeler Zip Huffman' («метод Берроуза: Вілера: Хаффмана»); за ними йде цифра (від '1' до '9'), що позначає розмір блоку в сотнях кілобайтів (наприклад, 'BZh9' = 900 КБ).
- Вихідний код ядра Linux поширювався виключно у форматі .tar.bz2 понад десять років, перш ніж перейти на .xz.
- Перетворення Берроуза-Вілера не стискає дані безпосередньо; воно переставляє порядок символів так, щоб однакові букви згруповувалися разом, що робить їх легкими для стиснення за допомогою кодування Хаффмана.
Поширені технічні запитання
Яка різниця між .gz та .bz2?
.bz2 використовує перетворення Берроуза-Вілера, щоб файли були меншими, ніж у форматі .gz, але стиснення та розпакування займають більше часу.
Чому bzip2 має команду 'bzip2recover'?
Оскільки bzip2 стискає дані незалежними блоками по 900 КБ, кожен із власним CRC, bzip2recover може витягувати неушкоджені блоки, навіть якщо частина файлу пошкоджена.
Як розпакувати файл .tar.bz2?
Ви можете розпакувати файли .tar.bz2 безпосередньо у своєму веббраузері за допомогою File2File.app без запуску інструментів командного рядка.