BZIP2-archief (.bz2)
Bzip2 StandaardBzip2 (BZ2) is een klassieke, octrooivrije Unix-compressietool en een bestandsformaat van Julian Seward. Het gebruikt de Burrows-Wheeler-transformatie om bestanden sterker te comprimeren dan met klassieke Gzip.
Inspecteren en metadata
Besturingssystemen en bestandsanalysators herkennen BZ2-bestanden aan de hand van de eerste binaire bytesequentie:
Bestandshandtekening op byteniveau (magic bytes)
Besturingssystemen en bestandsanalysators herkennen BZ2-bestanden aan de hand van de eerste binaire bytesequentie:
HEX-HANDTEKENING (OFFSET 0):
42 5A 68ASCII-WEERGAVE: BZh
Standaardisatie: Bzip2 Open Source Standard
Technische specificaties
| Containerarchitectuur | Streamheader ('BZh' + blokgroottecijfer 1-9) gevolgd door gecomprimeerde datablokken en 32-bits CRC |
| Compressie | Burrows-Wheeler Transform (BWT), Move-to-Front (MTF)-transformatie en Huffman-codering |
| Bytevolgorde (endianness) | Big-Endian bitstream-framing |
| Kleurruimten | N.v.t. (bytecompressiestroom) |
| Kanalen en structuur | Gecomprimeerde bytestream voor één bestand |
| Maximale afmetingen | Onbegrensde streamlengte (ondersteunt willekeurige bestandsgroottes) |
| Transparantie | 100% bitexact, verliesvrij behoud van gegevens |
| Streaming en progressief | Sequentiële blok-voor-blok-streaming met onafhankelijke CRC-controlesommen per blok |
Technische vergelijkingsmatrix: BZ2 versus concurrenten
| Technisch kenmerk | BZ2 (Huidig) | GZ | XZ | ZSTD |
|---|---|---|---|---|
| Kernalgoritme | Burrows-Wheeler Transform (BWT) | Deflate (LZ77 + Huffman) | LZMA / LZMA2 | Finite State Entropy + LZ77 |
| Compressie t.o.v. Gzip | 10% - 20% kleiner dan Gzip | Basisstandaard | 20% - 30% kleiner dan Gzip | 10% - 20% kleiner dan Gzip |
| Decompressiesnelheid | Traag (~30-50 MB/s) | Snel (~300 MB/s) | Matig (~100 MB/s) | Zeer snel (>1,5 GB/s) |
| Blokcontrolesommen | 32-bits CRC per blok | Eén CRC32 voor de hele stream | CRC64 voor de hele stream | xxHash64 voor de hele stream |
Veelvoorkomende beschadigingen en gids voor hex-herstel
Het uitpakken wordt afgebroken met de melding 'bzip2: Data integrity error when decompressing'.
Oorzaak: Omgeslagen bit in een gecomprimeerd blok, waardoor de inverse permutatiematrix van BWT de CRC32-validatie niet doorstaat.
Herstel: Gebruik de tool 'bzip2recover' om onbeschadigde blokken rondom de beschadigde sector te redden.
Beveiligingsanalyse en aanvalsvectoren voor parsers
Bzip2-implementaties omvatten complexe bitstreamsortering en het parsen van Huffman-tabellen, waarbij zich in het verleden fouten met integeroverflow hebben voorgedaan.
Bekende aanvalsvectoren
- Integeroverflow bij het toewijzen van de BWT-sorteertabel (bijv. CVE-2016-3189).
- Out-of-bounds-schrijfbewerking tijdens het samenstellen van de Huffman-decodeertabel.
- Denial of service door pathologische invoerpatronen die zorgen voor de slechtst mogelijke kwadratische BWT-sorteertijden.
Aanbevolen beveiligingspraktijken: Decodeer BZ2-bestanden met geheugenveilige WASM-decoders met afgedwongen geheugengrenzen.
Historische oorsprong en mijlpalen
Belangrijkste voordelen
- Presteert consequent 10% tot 20% beter dan klassieke Gzip bij broncode-tarballs, systeemlogboeken en tekstdatabases.
- Onafhankelijke blokarchitectuur (100k tot 900k) bevat 32-bits CRC-controlesommen per blok voor robuuste integriteitscontroles.
- Standaard beschikbaar in veel Linux-, BSD- en macOS-opdrachtregelomgevingen, al verschilt dit per distributie.
Technische beperkingen
- Aanzienlijk tragere compressie- en decompressiesnelheden in vergelijking met moderne algoritmen zoals Zstandard.
- Alleen compressie van één bestand: vereist een combinatie met TAR (.tar.bz2) om meerdere bestanden of mappen in te pakken.
- Hoger CPU-gebruik tijdens decompressie dan Gzip of Zstd.
Interessante technische weetjes
- De 'BZh'-bestandshandtekening (magic bytes) staat voor 'Burrows-Wheeler Zip Huffman', gevolgd door een cijfer ('1' tot en met '9') dat de blokgrootte in honderden kilobytes aangeeft (bijv. 'BZh9' = 900 KB).
- De broncode van de Linux-kernel werd ruim tien jaar lang uitsluitend in .tar.bz2-formaat verspreid voordat deze overstapte naar .xz.
- De Burrows-Wheeler-transformatie herschikt gegevens zodat herhaalde tekens bij elkaar komen. Daardoor kan Huffman-codering daarna effectiever zijn.
Veelgestelde technische vragen
Wat is het verschil tussen .gz en .bz2?
.bz2 gebruikt de Burrows-Wheeler-transformatie om kleinere bestandsgroottes te bereiken dan .gz, maar het comprimeren en decomprimeren duurt langer.
Waarom heeft bzip2 een 'bzip2recover'-opdracht?
Omdat bzip2 data comprimeert in onafhankelijke blokken van 900 KB, elk met een eigen CRC, kan bzip2recover onbeschadigde blokken uitpakken, zelfs als een deel van het bestand beschadigd is.
Hoe kan ik een .tar.bz2-bestand uitpakken?
U kunt .tar.bz2-bestanden rechtstreeks in uw webbrowser uitpakken met File2File.app, zonder opdrachtregeltools te gebruiken.