Tệp nén BZIP2 (.bz2)

Bzip2 Tiêu chuẩn

Bzip2 (BZ2) là một tiện ích nén và định dạng tệp Unix kinh điển, không vướng bằng sáng chế, được tạo ra bởi Julian Seward. Tiện ích này sử dụng phép biến đổi Burrows-Wheeler để đạt được tỷ lệ nén chặt hơn đáng kể so với Gzip cổ điển.

Kiểm tra & Siêu dữ liệu

Các hệ điều hành và trình phân tích tệp nhận dạng tệp BZ2 bằng cách kiểm tra chuỗi byte nhị phân đầu tệp:

Chọn hoặc thả tệp vào đây

Riêng tư - tệp không bao giờ rời khỏi thiết bị của bạn

Hoặc dán Ctrl+V
Cam kết bảo vệ quyền riêng tư, không truyền dữ liệu qua mạng: 0 byte được tải lên máy chủ bên ngoài. Toàn bộ quá trình xử lý diễn ra cục bộ trong hộp cát trình duyệt của bạn.

Chữ ký ở đầu tệp (mẫu byte nhận diện)

Các hệ điều hành và trình phân tích tệp nhận dạng tệp BZ2 bằng cách kiểm tra chuỗi byte nhị phân đầu tệp:

CHỮ KÝ HEX (OFFSET 0):

42 5A 68

BIỂU DIỄN ASCII: BZh

Tiêu chuẩn hóa: Bzip2 Open Source Standard

Thông số kỹ thuật

Kiến trúc ContainerTiêu đề luồng (BZh + chữ số kích thước khối 1-9), tiếp theo là các khối dữ liệu nén và CRC 32 bit
NénBiến đổi Burrows-Wheeler (BWT), Move-to-Front (MTF) và mã hóa Huffman
Thứ tự byteĐóng khung luồng bit theo thứ tự byte lớn (big-endian)
Không gian màuKhông áp dụng (luồng nén byte)
Kênh & Cấu trúcLuồng byte nén của một tệp
Kích thước tối đaĐộ dài luồng không giới hạn (hỗ trợ tệp có kích thước bất kỳ)
Độ trong suốtBảo toàn dữ liệu không mất dữ liệu, khớp chính xác từng bit
Truyền phát & Tăng dầnTruyền phát tuần tự từng khối với kiểm tra tổng CRC riêng cho mỗi khối

Ma trận so sánh kỹ thuật: BZ2 so với các đối thủ

Thuộc tính kỹ thuậtBZ2 (Hiện tại)GZXZZSTD
Thuật toán cốt lõiPhép biến đổi Burrows-Wheeler (BWT)Deflate (LZ77 + Huffman)LZMA / LZMA2Entropy trạng thái hữu hạn + LZ77
Độ nén so với GzipNhỏ hơn Gzip từ 10% đến 20%Tiêu chuẩn cơ sởNhỏ hơn Gzip từ 20% đến 30%Nhỏ hơn Gzip từ 10% đến 20%
Tốc độ giải nénChậm (~30-50 MB/s)Nhanh (~300 MB/s)Trung bình (~100 MB/s)Cực nhanh (>1,5 GB/s)
Tổng kiểm tra khốiCRC 32-bit trên mỗi khốiCRC32 trên một luồng đơnCRC64 trên luồngxxHash64 trên luồng

Các dạng hỏng thường gặp và hướng dẫn khôi phục bằng mã hex

Quá trình giải nén bị hủy bỏ với thông báo 'bzip2: Data integrity error when decompressing'.

Nguyên nhân gốc rễ: Bit bị lật trong khối nén khiến ma trận hoán vị nghịch đảo BWT không vượt qua được quá trình xác thực CRC32.

Khắc phục: Sử dụng tiện ích 'bzip2recover' để cứu vớt các khối không bị hỏng xung quanh khu vực bị lỗi.

Phân tích bảo mật và các đường tấn công nhằm vào bộ phân tích cú pháp

Các triển khai Bzip2 liên quan đến việc sắp xếp luồng bit phức tạp và phân tích cú pháp bảng Huffman từng gặp các lỗi tràn số nguyên trong quá khứ.

Các véc-tơ tấn công đã biết

  • Tràn số nguyên trong việc cấp phát mảng sắp xếp BWT (ví dụ: CVE-2016-3189).
  • Ghi vượt quá giới hạn trong quá trình lắp ráp bảng giải mã Huffman.
  • Từ chối dịch vụ thông qua các mẫu đầu vào bất thường khiến thời gian sắp xếp BWT đạt trường hợp xấu nhất theo bậc hai.

Biện pháp phòng thủ tốt nhất: Giải mã các tệp BZ2 bằng các bộ giải mã WASM an toàn về bộ nhớ với các ranh giới bộ nhớ được áp dụng.

Nguồn gốc lịch sử và các cột mốc

2019Federico Mena Quintero hiện đại hóa việc duy trì cơ sở mã bzip2 theo các sáng kiến bzip3 và mã nguồn mở hiện đại.
2000Phiên bản 1.0 phát hành, ổn định định dạng bzip2 trên các bản phân phối Linux và trình quản lý gói.
1996Julian Seward phát hành bzip2 0.15 để thay thế định dạng bzip trước đó vốn vướng các vấn đề về bằng sáng chế.

Ưu điểm & Lợi ích chính

  • Có tỷ lệ nén tốt hơn Gzip cổ điển từ 10% đến 20% trên các tệp tarball mã nguồn, nhật ký hệ thống và cơ sở dữ liệu văn bản.
  • Kiến trúc khối độc lập (100k đến 900k) bao gồm tổng kiểm tra CRC 32-bit trên mỗi khối để kiểm tra tính toàn vẹn mạnh mẽ.
  • Có sẵn theo mặc định trong nhiều bản phân phối dòng lệnh Linux, BSD và macOS; việc tích hợp tùy thuộc vào bản phân phối.

Hạn chế & Nhược điểm kỹ thuật

  • Tốc độ nén và giải nén chậm hơn đáng kể so với các thuật toán hiện đại như Zstandard.
  • Chỉ nén tệp đơn: yêu cầu ghép nối với TAR (.tar.bz2) để đóng gói nhiều tệp hoặc thư mục.
  • Sử dụng CPU cao hơn trong quá trình giải nén so với Gzip hoặc Zstd.

Thông tin kỹ thuật thú vị

  • Các byte nhận dạng 'BZh' viết tắt của 'Burrows-Wheeler Zip Huffman', theo sau là một chữ số (từ '1' đến '9') biểu thị kích thước khối tính bằng hàng trăm kilobyte (ví dụ: 'BZh9' = 900 KB).
  • Mã nguồn Nhân Linux được phân phối độc quyền ở định dạng .tar.bz2 trong hơn một thập kỷ trước khi chuyển sang .xz.
  • Phép biến đổi Burrows-Wheeler không nén dữ liệu trực tiếp; nó hoán vị thứ tự các ký tự để các chữ cái giống nhau tụ lại với nhau.

Các câu hỏi kỹ thuật thường gặp

Sự khác biệt giữa .gz và .bz2 là gì?

.bz2 sử dụng thuật toán biến đổi Burrows-Wheeler để đạt kích thước tệp nhỏ hơn .gz, nhưng bù lại tốn nhiều thời gian hơn để nén và giải nén.

Tại sao bzip2 lại có lệnh 'bzip2recover'?

Bởi vì bzip2 nén dữ liệu thành các khối 900 KB độc lập, mỗi khối có mã CRC riêng, nên bzip2recover có thể trích xuất các khối không bị hỏng ngay cả khi một phần của tệp gặp sự cố.

Làm cách nào để giải nén tệp .tar.bz2?

Bạn có thể giải nén các tệp .tar.bz2 trực tiếp trong trình duyệt web của mình với File2File.app mà không cần chạy các công cụ dòng lệnh phức tạp.