Archiwum BZIP2 (.bz2)
Bzip2 StandardBzip2 (BZ2) to klasyczne, wolne od patentów uniksowe narzędzie kompresji i format pliku stworzony przez Juliana Sewarda, wykorzystujący transformację Burrowsa-Wheelera do uzyskania znacznie lepszej kompresji niż klasyczny Gzip.
Inspekcja i metadane
Systemy operacyjne i analizatory plików identyfikują pliki BZ2, sprawdzając początkową sekwencję bajtów binarnych:
Podpis nagłówka na poziomie bajtów (Magic Bytes)
Systemy operacyjne i analizatory plików identyfikują pliki BZ2, sprawdzając początkową sekwencję bajtów binarnych:
PODPIS HEX (OFFSET 0):
42 5A 68REPREZENTACJA ASCII: BZh
Normalizacja: Bzip2 Open Source Standard
Specyfikacja techniczna
| Architektura kontenera | Nagłówek strumienia („BZh” i cyfra rozmiaru bloku od 1 do 9), po którym następują skompresowane bloki danych i 32-bitowa suma kontrolna CRC |
| Kompresja | Transformacja Burrowsa-Wheelera (BWT), transformacja Move-to-Front (MTF) oraz kodowanie Huffmana |
| Kolejność bajtów (Endianness) | Ramka strumienia bitów w formacie Big-Endian |
| Przestrzenie kolorów | Nie dotyczy (Strumień kompresji bajtowej) |
| Kanały i struktura | Strumień bajtów skompresowanych dla pojedynczego pliku |
| Maks. wymiary | Nieograniczona długość strumienia (obsługuje dowolne rozmiary plików) |
| Przezroczystość | 100% bezstratne zachowanie danych z dokładnością bit po bicie |
| Streaming i progresywne ładowanie | Sekwencyjne przesyłanie strumieniowe blok po bloku z niezależnymi sumami kontrolnymi CRC dla każdego bloku |
Techniczna macierz porównawcza: BZ2 a konkurencja
| Atrybut techniczny | BZ2 (Bieżący) | GZ | XZ | ZSTD |
|---|---|---|---|---|
| Główny algorytm | Transformacja Burrowsa-Wheelera (BWT) | Deflate (LZ77 + Huffman) | LZMA / LZMA2 | Entropia Stanów Skończonych + LZ77 |
| Kompresja w porównaniu do Gzip | Pliki są o 10% - 20% mniejsze niż po kompresji Gzip | Standard bazowy | Pliki są o 20% - 30% mniejsze niż po kompresji Gzip | Pliki są o 10% - 20% mniejsze niż po kompresji Gzip |
| Prędkość dekompresji | Wolna (~30-50 MB/s) | Szybka (~300 MB/s) | Umiarkowana (~100 MB/s) | Błyskawiczna (>1,5 GB/s) |
| Sumy kontrolne bloków | 32-bitowe CRC dla każdego bloku | Pojedynczy strumień CRC32 | Strumień CRC64 | Strumień xxHash64 |
Typowe tryby uszkodzeń i przewodnik odzyskiwania szesnastkowego
Rozpakowywanie zostaje przerwane z komunikatem „bzip2: Data integrity error when decompressing”.
Główna przyczyna: Zmieniony bit w skompresowanym bloku powoduje, że odwrotna macierz permutacji BWT nie przechodzi weryfikacji CRC32.
Odzyskiwanie: Użyj narzędzia „bzip2recover”, aby odzyskać nieuszkodzone bloki otaczające uszkodzony sektor.
Analiza bezpieczeństwa i wektory ataku na parser
Implementacje Bzip2 obejmują złożone sortowanie strumienia bitów i analizowanie tablic Huffmana, w których w przeszłości występowały błędy przepełnienia liczby całkowitej.
Znane wektory ataku
- Przepełnienie liczby całkowitej w alokacji tablicy sortowania BWT (np. CVE-2016-3189).
- Zapis spoza zakresu pamięci podczas składania tablicy dekodowania Huffmana.
- Atak typu odmowa usługi (DoS) poprzez patologiczne wzorce wejściowe powodujące najgorsze, kwadratowe czasy sortowania BWT.
Najlepsze praktyki obronne: Dekoduj pliki BZ2 za pomocą bezpiecznych pod względem pamięci dekoderów WASM z wymuszonymi granicami pamięci.
Pochodzenie historyczne i kamienie milowe
Główne zalety
- Stale przewyższa klasyczny Gzip o 10% do 20% w przypadku archiwów kodu źródłowego, logów systemowych i baz danych tekstowych.
- Niezależne bloki o rozmiarze od 100 do 900 kB mają własne 32-bitowe sumy kontrolne CRC, co ułatwia wiarygodne sprawdzanie integralności.
- Dostępny natywnie w wielu dystrybucjach Linuxa, BSD i macOS; obecność zależy od dystrybucji.
Ograniczenia techniczne i wady
- Znacznie wolniejsza prędkość kompresji i dekompresji w porównaniu do nowoczesnych algorytmów, takich jak Zstandard.
- Kompresja tylko dla pojedynczych plików: wymaga połączenia z TAR (.tar.bz2) w celu spakowania wielu plików lub katalogów.
- Wyższe zużycie procesora podczas dekompresji niż w przypadku Gzip lub Zstd.
Ciekawe informacje techniczne
- Sekwencja bajtów „BZh” oznacza „Burrows-Wheeler Zip Huffman”; następująca po niej cyfra od 1 do 9 określa rozmiar bloku w setkach kilobajtów (np. „BZh9” oznacza 900 kB).
- Kod źródłowy jądra systemu Linux był dystrybuowany wyłącznie w formacie .tar.bz2 przez ponad dekadę przed migracją do .xz.
- Transformacja Burrowsa-Wheelera sama w sobie nie kompresuje danych; zmienia kolejność znaków tak, by identyczne znaki znalazły się obok siebie.
Często zadawane pytania techniczne
Jaka jest różnica między .gz a .bz2?
.bz2 używa transformacji Burrowsa-Wheelera, aby uzyskać mniejsze rozmiary plików niż .gz, ale kompresja i dekompresja trwają dłużej.
Dlaczego bzip2 ma polecenie „bzip2recover”?
Ponieważ bzip2 kompresuje dane w niezależnych blokach o rozmiarze 900 KB, z których każdy ma własne CRC, narzędzie bzip2recover może wyodrębnić nieuszkodzone bloki, nawet jeśli część pliku jest uszkodzona.
Jak mogę wypakować plik .tar.bz2?
Możesz rozpakować pliki .tar.bz2 bezpośrednio w przeglądarce internetowej za pomocą File2File.app bez używania narzędzi wiersza poleceń.