BZIP2 архив (.bz2)
Стандарт СтандартBzip2 (BZ2) е класическа Unix програма и файлов формат за компресия без патентни ограничения, създаден от Джулиан Сюард. Използва трансформацията на Бъроуз-Уилър, за да постига по-висока степен на компресия от класическия Gzip.
Проверка и метаданни
Операционните системи и файловите анализатори идентифицират BZ2 файлове чрез проверка на началната двоична байтова последователност:
Байтов подпис на заглавката (сигнатурни байтове)
Операционните системи и файловите анализатори идентифицират BZ2 файлове чрез проверка на началната двоична байтова последователност:
HEX ПОДПИС (ОФСЕТ 0):
42 5A 68ASCII ПРЕДСТАВЯНЕ: BZh
Стандартизация: Стандарт с отворен код за Bzip2
Технически спецификации
| Контейнерна архитектура | Заглавна част на потока („BZh“ и цифра за размера на блока от 1 до 9), последвана от компресирани блокове с 32-битов CRC |
| Компресия | Трансформация на Бъроуз-Уилър (BWT), трансформация Move-to-Front (MTF) и кодиране на Хъфман |
| Поредност на байтовете (Endianness) | Обрамчването на битовия поток е в ред от старшия към младшия байт (Big-Endian). |
| Цветови пространства | Неприложимо (поток за компресия на байтове) |
| Канали и структура | Компресиран поток от байтове на един файл |
| Максимални размери | Неограничена дължина на потока (поддържа файлове с произволен размер) |
| Прозрачност | 100% беззагубно запазване на данните до последния бит |
| Поточно предаване и прогресивно зареждане | Последователно поточно предаване блок по блок с независима CRC проверка за всеки блок |
Техническа сравнителна матрица: BZ2 спрямо конкуренти
| Технически атрибут | BZ2 (Текущ) | GZ | XZ | ZSTD |
|---|---|---|---|---|
| Основен алгоритъм | Трансформация на Бъроуз-Уилър (BWT) | Deflate (LZ77 + Huffman) | LZMA / LZMA2 | Ентропия на крайните състояния + LZ77 |
| Компресия спрямо Gzip | 10% - 20% по-малък от Gzip | Базов стандарт | 20% - 30% по-малък от Gzip | 10% - 20% по-малък от Gzip |
| Скорост на декомпресия | Бавна (около 30-50 MB/s) | Бърза (около 300 MB/s) | Умерена (около 100 MB/s) | Много висока (над 1,5 GB/s) |
| Блокови контролни суми | 32-битов CRC на блок | CRC32 за целия поток | CRC64 за потока | xxHash64 за потока |
Често срещани видове повреди и ръководство за възстановяване на шестнадесетични данни
Извличането прекъсва с 'bzip2: Data integrity error when decompressing'.
Първопричина: Променен бит в компресирания блок, който води до неуспешна CRC32 проверка на матрицата за обратна пермутация на BWT.
Възстановяване: Използвайте помощната програма 'bzip2recover', за да възстановите неповредените блокове около повредения сектор.
Анализ на сигурността и вектори на атака към парсера
Реализациите на Bzip2 включват сложно сортиране на битови потоци и анализ на таблици на Хофман, които исторически са страдали от уязвимости на целочислено препълване.
Известни вектори на атака
- Целочислено препълване при заделянето на памет за масива за сортиране на BWT (напр. CVE-2016-3189).
- Запис извън границите по време на изграждането на таблицата за декодиране по Хофман.
- Отказ от услуга (DoS) чрез патологични входни модели, водещи до най-лошия случай на квадратично време за BWT сортиране.
Най-добри практики за защита: Декодирайте BZ2 файлове с помощта на безопасни за паметта WASM декодери с наложени ограничения на паметта.
Исторически произход и етапи
Основни предимства
- При архиви с изходен код, системни журнали и текстови бази данни Bzip2 постоянно постига с 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 KB).
- Изходният код на ядрото на Linux се разпространяваше изключително във формат .tar.bz2 в продължение на повече от десетилетие, преди да мигрира към .xz.
- Трансформацията на Бъроуз-Уилър не компресира данните директно; тя пренарежда последователността от символи така, че еднаквите символи да се групират заедно, което ги прави лесни за компресиране чрез кодиране на Хофман.
Често задавани технически въпроси
Каква е разликата между .gz и .bz2?
.bz2 използва трансформацията на Burrows-Wheeler, за да създава по-малки файлове от .gz, но компресирането и декомпресирането отнемат повече време.
Защо bzip2 има команда 'bzip2recover'?
Тъй като bzip2 компресира данните в независими блокове по 900 KB, всеки със собствен CRC, bzip2recover може да извлече неповредените блокове дори когато част от файла е повредена.
Как мога да извлека .tar.bz2 файл?
Можете да разархивирате .tar.bz2 файлове директно във вашия уеб браузър с File2File.app, без да се налага да стартирате инструменти с команден ред.