BZIP2 压缩包 (.bz2)

Bzip2 标准

Bzip2 (BZ2) 是一种经典的无专利 Unix 压缩实用程序和文件格式,由 Julian Seward 创建,利用 Burrows-Wheeler 变换实现了比经典 Gzip 更高的压缩率。

检查与元数据

操作系统和文件分析器通过检查开头的二进制字节序列来识别 BZ2 文件:

选择或将文件拖放到此处

隐私保护 - 文件不会离开您的设备

或粘贴 Ctrl+V
零网络传输隐私保证: 上传至外部服务器的数据为 0 字节。所有处理均在您的浏览器沙箱中本地完成。

字节级文件头签名 (魔数)

操作系统和文件分析器通过检查开头的二进制字节序列来识别 BZ2 文件:

十六进制签名 (偏移量 0):

42 5A 68

ASCII 表示形式: BZh

标准化: Bzip2 开源规范

技术规格

容器架构流文件头(“BZh”加上表示块大小的数字 1 至 9),后接压缩数据块和 32 位 CRC 校验码
压缩方式Burrows-Wheeler 变换(BWT)、Move-to-Front 变换(MTF)和霍夫曼编码
字节序大端序比特流帧格式
色彩空间不适用(字节压缩流)
通道与结构单文件压缩字节流
最大尺寸流长度不限(支持任意大小的文件)
透明度100% 按位精确的无损数据保留
流式传输与渐进式加载按块顺序流式处理,每个数据块均带独立的 CRC 校验码

技术对比矩阵:BZ2 对比同类产品

技术属性BZ2 (当前)GZXZZSTD
核心算法Burrows-Wheeler 变换 (BWT)Deflate (LZ77 + 霍夫曼)LZMA / LZMA2有限状态熵 + LZ77
与 Gzip 相比的压缩率比 Gzip 小 10% - 20%基准标准比 Gzip 小 20% - 30%比 Gzip 小 10% - 20%
解压速度较慢(约 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"(bzip2:解压时数据完整性错误)。

根本原因: 压缩块中的位翻转导致 BWT 逆置换矩阵无法通过 CRC32 验证。

恢复方法: 使用“bzip2recover”工具,从损坏数据块周围恢复未受损的数据块。

安全分析与解析器攻击向量

Bzip2 的实现涉及复杂的位流排序和霍夫曼表解析,历史上曾出现过整数溢出漏洞。

已知攻击向量

  • BWT 排序数组分配中的整数溢出(例如 CVE-2016-3189)。
  • 霍夫曼解码表组装期间的越界写入。
  • 通过病态输入模式导致最坏情况下的二次 BWT 排序时间,从而造成拒绝服务。

防御性最佳实践: 使用强制实施内存边界的内存安全 WASM 解码器解码 BZ2 文件。

历史渊源与里程碑

2019Federico Mena Quintero 在 bzip3 和现代开源计划的推动下,对 bzip2 代码库的维护进行了现代化改造。
2000发布 1.0 版本,使 bzip2 格式在各个 Linux 发行版和包管理器中趋于稳定。
1996Julian Seward 发布了 bzip2 0.15,以取代存在专利问题的早期 bzip 格式。

核心优势与特点

  • 处理源代码压缩包、系统日志和文本数据库时,压缩效果通常比经典 Gzip 高 10% 至 20%。
  • 独立的数据块架构(每块 100 KB 至 900 KB),并为每块提供 32 位 CRC 校验码,以可靠地检查完整性。
  • 许多 Linux、BSD 和 macOS 命令行发行版都原生提供;是否包含取决于发行版。

技术局限与劣势

  • 与 Zstandard 等现代算法相比,压缩和解压速度明显较慢。
  • 仅支持单文件压缩:需要与 TAR(.tar.bz2)配合使用才能打包多个文件或目录。
  • 解压时比 Gzip 或 Zstd 消耗更多的 CPU 资源。

趣味技术冷知识

  • “BZh”魔数代表“Burrows-Wheeler Zip Huffman”,后接一个数字(“1”至“9”),表示以百 KB 为单位的块大小(例如,“BZh9”表示 900 KB)。
  • Linux 内核源代码在迁移到 .xz 之前,曾专门以 .tar.bz2 格式分发十多年。
  • Burrows-Wheeler 变换不直接压缩数据;它置换字符的顺序,使相同的字母聚集在一起,从而可以通过霍夫曼编码轻松进行压缩。

常见技术问题

.gz 和 .bz2 有什么区别?

.bz2 使用 Burrows-Wheeler 变换来实现比 .gz 更小的文件体积,但它需要更多的压缩和解压时间。

为什么 bzip2 包含 'bzip2recover' 命令?

因为 bzip2 将数据压缩在独立的 900 KB 块中(每个块都有自己的 CRC),所以即使文件的某一部分损坏,bzip2recover 也能提取未损坏的块。

如何提取 .tar.bz2 文件?

您可以使用 File2File.app 直接在网页浏览器中解压 .tar.bz2 文件,而无需运行命令行工具。