原始 DEFLATE (.deflate)
IETF 標準DEFLATE 是一種廣泛使用的無損資料壓縮演算法。它是 ZIP 壓縮檔、GZIP 串流、PNG 圖片與 HTTP 壓縮的核心技術。
將 GZIP 轉換為 DEFLATE
免費的瀏覽器端 GZIP 轉 DEFLATE 轉換器。在您的裝置上即時轉換檔案。
檢查與中繼資料
作業系統與檔案分析工具透過檢查開頭的二進位位元組序列來識別 DEFLATE 檔案:
位元組層級標頭簽章(檔案簽章)
作業系統與檔案分析工具透過檢查開頭的二進位位元組序列來識別 DEFLATE 檔案:
十六進位簽章(偏移量 0):
原始 DEFLATE 沒有固定的簽章;zlib 包裝的串流開頭為變動的 CMF/FLG 位元組ASCII 表示法: 沒有固定的 ASCII 簽章
標準化: IETF RFC 1951 / RFC 1950 (zlib)
技術規格
| 容器架構 | 原始 RFC 1951 位元串流或帶有 2 位元組標頭與 Adler-32 檢查碼的 RFC 1950 zlib 包裝串流 |
| 壓縮 | LZ77 滑動字典(最高 32 KB 視窗)結合動態/靜態霍夫曼熵編碼 |
| 位元組序 | 小端序位元封包順序 |
| 色彩空間 | 不適用(資料壓縮串流) |
| 色版與結構 | 原始二進位或文字資料串流 |
| 最大尺寸 | 無限制的串流長度 |
| 透明度 | 100% 位元精確無損資料重現 |
| 串流與漸進式 | 基於區塊的位元串流支援任意連續位元組串流 |
技術比較矩陣:DEFLATE 對比競爭格式
| 技術屬性 | DEFLATE (目前) | GZ | BROTLI | ZSTD |
|---|---|---|---|---|
| 標準化 | IETF RFC 1951(原始)/ RFC 1950 (zlib) | IETF RFC 1952 (Gzip) | IETF RFC 7932 (Brotli) | IETF RFC 8878 (Zstandard) |
| 滑動視窗 | 最高 32 KB | 最高 32 KB | 最高 16 MB | 最多 2 GB |
| 檢查碼模式 | 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」(資料檢查錯誤)。
根本原因: zlib 包裹串流結尾處的 4 位元組 Adler-32 檢查碼不符。
修復: 使用原始 inflate 繞過 Adler-32 驗證,或使用 File2File.app Deflate 復原工具進行修復。
安全性分析與解析器攻擊向量
DEFLATE 解析器必須嚴格驗證霍夫曼樹建構代碼,以防止超出範圍的指標寫入。
已知攻擊向量
- 不完整或超額訂閱的動態霍夫曼樹位元長度表,導致無效的記憶體讀取。
- 將極小的酬載擴展成數百 GB 記憶體的解壓縮炸彈(ZIP 炸彈)。
- 在未驗證的滑動視窗距離代碼中發生緩衝區超讀。
防禦最佳實務: 在解壓縮期間強制執行有界的最高記憶體配置與擴展率上限。
歷史起源與里程碑
1996Peter Deutsch 將 DEFLATE 正式規範為 IETF RFC 1951,zlib 規範為 RFC 1950。
1995Jean-loup Gailly 與 Mark Adler 發布 zlib,這是一個廣泛用於 DEFLATE 的 C 語言程式庫。
1991Phil Katz 為 PKZIP 2.0 發明了 DEFLATE,以取代較舊的 Implode 與 Reduce 演算法。
主要優勢與優點
- DEFLATE 在軟體程式庫與檔案格式中廣泛實作,不過可用支援取決於執行階段與應用程式。
- DEFLATE 規格可自由實作;授權與支援取決於特定的軟體實作。
- 快速解壓縮且記憶體佔用極小(僅需 32 KB 滑動視窗記憶體)。
技術限制與缺點
- 滑動視窗限於 32 KB,降低了對含有遠距冗餘的大型檔案的壓縮效率。
- 與 Brotli 和 Zstandard 等較新演算法相比,現代網頁資源的壓縮率較低。
- 原始 DEFLATE 串流若沒有 zlib 或 gzip 包裝器,則缺少自我描述的中繼資料或容器框架。
有趣的技術冷知識
- Phil Katz 在因早期 PKARC 公用程式中所使用的 LZW 演算法專利而被 Unisys 起訴後,發明了 DEFLATE。
- 標準 zlib 標頭位元組「78 9C」代表預設壓縮,「78 01」代表低壓縮,「78 DA」代表最高壓縮。
- PNG 使用 DEFLATE 來處理其圖片資料串流,這是由 PNG 格式所指定的。
常見技術問題
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 位元組串流解壓縮為原始未壓縮檔案。