原始 DEFLATE (.deflate)
IETF 标准DEFLATE 是计算历史上最无处不在的无损数据压缩算法,三十多年来一直为 ZIP 归档、GZIP 流、PNG 图像和 HTTP 网络压缩提供动力。
将 GZIP 转换为 DEFLATE
免费的浏览器端 GZIP 转 DEFLATE 转换器。在您的设备上即时转换文件。
检查与元数据
操作系统和文件分析器通过检查开头的二进制字节序列来识别 DEFLATE 文件:
字节级文件头签名 (Magic Bytes)
操作系统和文件分析器通过检查开头的二进制字节序列来识别 DEFLATE 文件:
十六进制签名 (偏移量 0):
78 9C / 78 01 / 78 DAASCII 表示形式: xœ / x. / xÚ
标准化: IETF RFC 1951 / RFC 1950 (zlib)
技术规格
| 容器架构 | Raw RFC 1951 bitstream or RFC 1950 zlib-wrapped stream with 2-byte header and Adler-32 checksum |
| 压缩方式 | LZ77 sliding dictionary (up to 32 KB window) combined with dynamic/static Huffman entropy coding |
| 字节序 | Little-Endian bit-packing order |
| 色彩空间 | N/A (Data Compression Stream) |
| 通道与结构 | Raw binary or text data stream |
| 最大尺寸 | Unbounded stream length |
| 透明度 | 100% bit-exact lossless data reproduction |
| 流式传输与渐进式加载 | Block-based bitstream supports arbitrary continuous byte streaming |
技术对比矩阵:DEFLATE 对比同类产品
| 技术属性 | DEFLATE (当前) | GZ | BROTLI | ZSTD |
|---|---|---|---|---|
| 标准化 | IETF RFC 1951 (原始) / RFC 1950 (zlib) | IETF RFC 1952 (Gzip) | IETF RFC 7932 (Brotli) | IETF RFC 8878 (Zstandard) |
| 滑动窗口 | 最大 32 千字节 | 最大 32 千字节 | 最高 16 兆字节 | 最高 2 吉字节 |
| 校验和模式 | Adler-32(在 zlib 包装器中) | CRC-32(在 gzip 包装器中) | 流中无内置 | xxHash64(64位快速哈希) |
| 日常使用 | PNG 图像、PDF 流、ZIP | Unix .tar.gz、HTTP gzip | 网络字体 (WOFF2)、HTTP br | Linux 内核、数据库、游戏 |
常见损坏模式与十六进制恢复指南
解压失败,提示"Z_DATA_ERROR: incorrect data check"(Z_DATA_ERROR:数据检查不正确)。
根本原因: zlib 包装流末尾的 4 字节 Adler-32 校验和不匹配。
恢复方法: 使用原始 inflate 绕过 Adler-32 验证,或使用 File2File Deflate 恢复进行修复。
安全分析与解析器攻击向量
DEFLATE 解析器必须严格验证霍夫曼树构建代码,以防止越界指针写入。
已知攻击向量
- 不完整或超额订阅的动态霍夫曼树位长度表导致无效的内存读取。
- 将微小有效负载扩展到数百 GB RAM 的解压炸弹(zip 炸弹)。
- 未经验证的滑动窗口距离代码中的缓冲区过度读取。
防御性最佳实践:
历史渊源与里程碑
核心优势与特点
- 无可争议的全球标准:在硬件、操作系统和每个编程运行时中实现。
- 无专利和免版税的设计确保了整个计算行业的开放访问。
- 解压速度快,内存占用极小(仅需 32 KB 滑动窗口内存)。
技术局限与劣势
- 滑动窗口限制为 32 KB,降低了对具有遥远冗余的大文件的压缩效率。
- 与 Brotli 和 Zstandard 等较新算法相比,现代网络资产的压缩比较低。
- 如果没有 zlib 或 gzip 包装器,原始 DEFLATE 流缺少自描述元数据或容器帧。
趣味技术冷知识
- Phil Katz 在早期 PKARC 实用程序中使用的受专利保护的 LZW 算法被 Unisys 起诉后,发明了 DEFLATE。
- 标准的 zlib 头部字节"78 9C"表示默认压缩,"78 01"表示低压缩,"78 DA"表示最大压缩。
- 地球上的每个 PNG 图像都使用 DEFLATE 来压缩其 IDAT 像素块。
常见技术问题
DEFLATE、zlib 和 gzip 之间有什么区别?
DEFLATE 是原始压缩算法(RFC 1951)。Zlib 在 DEFLATE 的基础上包装了 2 字节的头部和 Adler-32 校验和(RFC 1950)。Gzip 在 DEFLATE 的基础上包装了文件元数据和 CRC-32 校验和(RFC 1952)。
为什么 PNG 使用 DEFLATE?
PNG 格式创建于 1995 年,旨在取代 GIF 且不使用受专利保护的 LZW 算法,因此选择开放、免版税的 DEFLATE 进行压缩。
如何解压原始的 .deflate 文件?
你可以直接在网页浏览器中使用 File2File.app,将原始的 DEFLATE 或 zlib 字节流解压为未压缩的原始文件。