ZIP格式

資料壓縮與文件儲存的檔案格式

ZIP檔案格式是一種數據壓縮和文件儲存的檔案格式,原名Deflate,發明者為菲爾·卡茨Phil Katz),他於1989年1月公佈了該格式的資料。ZIP通常使用字尾名「.zip」,它的MIME格式為application/zip。目前,ZIP格式屬於幾種主流的壓縮格式之一,其競爭者包括RAR格式以及開放原始碼的7z格式。從效能上比較,RAR及7z格式較ZIP格式壓縮率較高,而7-Zip由於提供了開源的壓縮工具而逐漸在更多的領域得到應用。MicrosoftWindows ME作業系統開始內建對zip格式的支援,即使用戶的電腦上沒有安裝解壓縮軟件,也能打開和製作zip格式的壓縮檔案,OS X和流行的Linux作業系統也對zip格式提供了類似的支援。因此如果在網絡上載播和分發檔案,zip格式往往是最常用的選擇。

ZIP
一個來自Nuvola圖示包中的zip檔案圖示
副檔名
.zip
網路媒體型式
application/zip
統一類型標識com.pkware.zip-archive
開發者Phil Katz
格式類型數據壓縮

歷史

前身

1985年一家名為SEA(System Enhancement Associates,系統增強夥伴)的小公司開發了一個在MS-DOS平台下的商業壓縮軟件,名為ARC。當時的軟件發行方式與現在略有不同,用戶購買了軟件,除了能得到軟件的可執行檔案,還能得到一份C語言原始碼。當時的卡茨與很多用電腦的普通人一樣,缺乏資金購買昂貴的商業軟件。當時卡茨從網上下載了一份ARC的C語言原始碼,並用匯編語言將其重新編寫並編譯了出來。這個軟件名為:PKARC(Phillip Katz' ARC)。PKARC因為是卡茨參照原始碼編寫的,所以完全相容ARC,並且效能上比ARC高。卡茨當時將這個新軟件上載到了網絡上。顯然,卡茨此舉造成對SEA公司的侵權。SEA最初希望通過聯絡卡茨,使PKARC成為SEA公司旗下的一款產品,但是被卡茨拒絕了。最終,雙方對簿公堂,結果是卡茨敗訴,他被判對SEA公司賠款以及停止發放PKARC。後來,卡茨在對PKARC續作的開發中,被迫重新覆寫所有代碼。PKARC即為下文提及的PKZIP的前身,但卡茨沒有從PKARC賺到一分錢,還是窮困潦倒,又因為酗酒等眾多原因,2000年死在一個汽車旅館中。

誕生

這場官司過後幾周,卡茨就製作出了新的壓縮軟件PKZIP(Phillip Katz' ZIP)。這款全新的軟件比ARC的壓縮率、壓縮效能都要高許多,並且包含更多功能。此後,卡茨還將ZIP的所有技術參數公諸於眾。ZIP(意為「速度」)這一名稱是由卡茨的朋友羅伯特·馬宏利(Robert Mahoney)建議的。他們想暗示,他們的產品比ARC在一定時間內更快速。這個名字往往被寫成大寫字母,因為在DOS系統內,通常都是使用大寫字母作為字尾名的。(這是由於MS-DOS執行在FAT檔案系統上。)

Winzip的面世

Windows 3.0面世之前,有兩種格式與ZIP同樣流行,一個是LHA(LHArc),另一個是ARJ(Archiver Robert Jung),直至1995年,這3種壓縮格式都是PC應用的主流。1995年,微軟發佈了Windows95,當時從DOS轉移到Windows的用戶們,極度渴求在圖形介面下的優良軟件。Winzip以其優良的效能以及不太晦澀的圖形化使用者介面吸引了用戶的目光,在當時獲得了大量的市場佔有量。其實,當時的WinZip僅僅是一個呼叫DOS資源的GUI外殼,但是其從Windows 3就開始的製作經驗使其GUI效能和外觀都比當時的流行軟件要好。很快地,WinZip就成為了當時一個很流行的軟件,這同時也帶動了ZIP的傳播。由於在前期太受歡迎,使得到後期很多用戶都以為,是WinZip創造了ZIP,其實這是一個誤解,關於WinZip更詳細的資訊,參見WinZip

發展

因格式開放且免費,越來越多的軟件內嵌支援開啟Zip檔案。這時,Zip檔案越來越像一個經過壓縮的透明資料夾。

  1. 自Windows Me以來,Windows內嵌支援打開以及壓縮Zip檔案。
  2. 一些下載軟件的工具,支援部分下載Zip檔案然後進行恢復。
  3. 越來越多的軟件內嵌支援打開Zip檔案。
  4. 幾乎所有的壓縮軟件都支援打開及製作Zip檔案。

危機

基本上,Zip檔案的發展都是由PKware公司與Winzip所推動。然而,兩家公司就某些問題上互相猜疑,導致發展緩慢。人們目前最想在Zip檔案實現的目標,就是加強目前Zip檔案的加密能力。就目前而言,Zip的檔案加密能力弱得可憐,僅憑單單一個口令保護,根本滿足不了安全需求。雖然卡茨在世時公開了格式,留有為日後升級的空間,但Winzip僅僅是一個用戶,根本無法發佈新標準,其標準的制訂權依然保留在PKware手中。2002年時,PKware開發了支援256位AES加密的PKZIP 5.0,但是Winzip在2003年發佈的Winzip 9卻被證明了無法與之相容。雙方都互相指責對方違背了Zip的自由開放精神。這是Zip自誕生日起最嚴峻的挑戰。

檔案頭

使用文字編輯器打開任何一個Zip檔案,都能看到檔案的前兩個字母為:PK。

技術

ZIP是一種相當簡單的分別壓縮每個檔案的存檔格式,分別壓縮檔案允許不必讀取另外的數據而檢索獨立的檔案。理論上,這種格式甚至允許對不同的檔案使用不同的演算法。不管用何種方法,存檔中包含很多小檔案的時候,佔用空間會明顯的比壓縮成一個獨立的檔案(在類Unix系統中一個經典的例子是:普通的tar.gz存檔是由一個使用gzip壓縮的TAR存檔組成)要大。

ZIP的規約指出檔案可以不經壓縮或者使用不同的壓縮演算法來儲存。然而實際上ZIP幾乎總是在使用卡茨(Katz)的DEFLATE演算法。

ZIP支援基於對稱加密系統的一個簡單的密碼,現在已知有嚴重的缺陷,存在已知明文攻擊字典攻擊暴力攻擊。ZIP也支援分割壓縮。

近來,ZIP加入了新的壓縮和加密演算法,不過這些新演算法並沒有被許多工具所支援並且沒有得到廣泛應用。

壓縮方法

用來對比壓縮大小的是[1]的內容和最大壓縮比。

Shrinking(方法1)
收縮(Shrinking)是LZW的微小調整的一個異體,同樣也受到LZW專利問題的影響。因為不明確這項專利是否涵蓋反收縮,一些開放原始碼的專案(例如Info-ZIP)決定謹慎行事,在預設的構造里不包含反收縮的支援。
Reducing(方法2-5)
縮小(Reducing)壓縮重複位元組序列的組合,然後應用一個基於概率的編碼得到結果。
Imploding(方法6)
爆聚(Imploding)使用一個滑動窗口壓縮重複位元組序列,然後使用多重Shannon-Fano樹壓縮得到結果。
Tokenizing(方法7)
權杖化(Tokenizing)的方法數是保留的。PKWARE規約沒有為其定義一個演算法。
Deflate和增強的Deflate(方法8和9)
這些方法使用Deflate演算法。Deflate允許最大32K的窗口,而增強的Deflate允許最大64K的窗口。增強版完成任務稍稍成功一些,但是並沒有得到廣泛的支援。
Deflate比較尺寸是52.1MiB(使用pkzip for Windows,版本8.00.0038測試)
增強的Deflate比較尺寸是52.8MiB(使用pkzip for Windows,版本8.00.0038測試)
PKWARE Data Compression Library Imploding(方法10)
PKWARE數據壓縮庫爆聚(PKWARE Data Compression Library Imploding),官方ZIP格式規約就此沒有給出更多的資訊。
比較尺寸是61.6MiB(使用pkzip for Windows,版本8.00.0038測試,選擇二進制模式)
方法11
此方法被PKWARE保留。
Bzip2(方法12)
此方法使用bzip2演算法。此演算法比deflate高效但是並沒有被(基於Windows平台的)工具所支援。
比較尺寸是50.6MiB(使用pkzip for Windows,版本8.00.0038測試)

缺點

由於出現於市場的時間早,現在Zip檔案與其他壓縮格式相比有眾多無法忽視的缺點。

原生並不支援Unicode檔案名稱,容易導致一部分資源共用困難,在東亞文化圈的資源交流尤其顯著;無法與7z相比的壓縮比率以及如WinRAR的Recovery Record修復支援功能的缺乏亦都是其衰微的原因。

針對上述缺點,前WinZip團隊有開發後繼者ZIPX格式,但仍不普及。

參見

外部連結