不同類型的文件可以選擇不同的壓縮演算法 圖片壓縮演算法 文字壓縮演算法 視頻壓縮演算法等 選擇正確的演算法,能夠提高壓縮率
『貳』 壓縮文件格式rar和zip有什麼區別
樓上的見解比較狹隘。我來全面的解釋一下。
一、目錄表(TOC)與分卷(Volume)
拋開壓縮演算法不談,我認為zip、rar在文件格式上最大的差異就在目錄表(Table of Contents,TOC):zip有TOC,而rar沒有。
TOC這個詞其實是從出版界借用過來的,指的就是每一本書正文前面的「目錄」,它的作用地球人都知道:如果想快速找到書中某一內容,可以先查TOC,然後按照TOC指明的頁碼直接翻即可。
在紙質書里TOC是印刷出來的一張表,而在電子文件里則是由結構化數據構成的一張表,它的目的同樣是為了快速定位:如果想找文件中的某一內容,可以先查TOC,知道感興趣的內容在文件的什麼位置,直接跳過去就行了。最常見的運用就是avi、rm等多媒體文件:播放的時候經常有人在播放條上點來點去跳著看(即「隨機訪問」),如果沒有TOC,在長達幾百兆的文件里來回定位會慢死。
具體到zip文件里,TOC是放在文件尾部的一張表,裡面列出了zip包中每一個文件的屬性(文件名、長度等)和在zip包中的存放位置。如果需要隨機訪問zip包中的某一個文件,只需在TOC里找到這個文件的存放位置,直接跳過去即可。
而RAR文件里則沒有TOC,在文件頭之後所有文件按順序連續存放。
這種差異造成的結果就是:隨機訪問時zip比rar快,而順序訪問時rar比zip快。
所謂隨機訪問,就是前面說過的隨機訪問壓縮包中某個指定的文件。舉一個簡單的例子:一本反編譯或下載到的網頁電子書,有大量HTML、圖像、css、js,然後打成壓縮包。現在要求在不解包的情況下訪問其中的頁面:可以想像,打開每個HTML頁面的時候,它所附帶的圖像、css、js等文件可能隨機分布在整個壓縮包里,如果沒有TOC,查找每個文件的時候都要從頭開始找,將會有多慢。 所以各位可以理解為什麼jar包就是標准zip包,而我也只用zip格式保存反編譯出來的電子書、漫畫、PDG書等一切可能需要隨機訪問的東西。
所謂順序訪問,就是將整個壓縮包從頭解到尾。在這方面RAR具有天然的優勢。而且為了節省WinRAR列文件的時間,對於單個RAR我一般都直接通過右鍵菜單解壓縮,很少雙擊壓縮包打開再解壓。
由於rar的原作者已經去世,造成這種差異的確切原因我相信已不可考,但我個人猜測可能與DOS時代的備份軟體之爭有關:在DOS時代,電腦硬碟不像現在這樣奢侈,20MB就算很大了。這樣的容量用兩盒軟盤 即可備份,備份成本相對數據本身的價值來說非常低廉。因此在DOS時代,很多公司和機構都制定有定期硬碟備份政策,以免因為人為或非人為的因素 (早期硬碟可沒有如今可靠)而造成不可挽回的數據損失。在備份軟體方面,雖然微軟已經隨DOS提供了BackupRestore工具,但是他們基本不具備數據壓縮能力,因此在壓縮軟體中提供備份功能,就成為DOS時代的一個時尚。由於DOS時代的備份介質多為軟盤,因此壓縮 軟體的備份功能其實就轉化成如今很常見的一個功能:分卷壓縮功能,即按照軟盤容量進行分卷壓縮,然後將分卷壓縮文件備份(Backup)到軟盤,需要的時候再解壓,或恢復(Restore)到硬碟。
DOS時代最有名的zip工具是pkzip,出現得比DOS版的RAR早。在分卷壓縮時,pkzip按照zip文件規范,將TOC存放在最後,即存儲在最後一卷,由此帶來如下問題:
1、恢復時,每解壓一張盤,都要先將最後一張盤插進去一次,讀一次TOC。
2、只要最後一張盤上的TOC壞了,就算其它盤都是好的,也不能正常解壓。
這兩個缺點,尤其是第一個缺點實在是太臭名昭著了,因此當時出現了非常強烈的改革呼聲。在這個關鍵時刻,DOS版的RAR出現了:不僅壓縮率比pkzip高(這點在DOS時代非常重要,畢竟軟盤又貴容量又小),而且由於吸取了當時對zip格式的批評,取消了TOC,因此:
1、在恢復分卷壓縮的備份文件時,不需要頻繁插入帶有TOC的分卷,按順序換盤即可。
2、即使某個分卷損壞,也可以跳過,從完好的分卷再開始解壓。
由於這些原因(當然還有其它原因),RAR推出後迅速取得了成功,pkzip在DOS時代就開始流失用戶,到Windows時代基本消聲匿跡。在Windows時代推出的Winzip,則徹底放棄了分卷壓縮功能(zip格式永遠的痛?)。 而從我看到的源自WinRAR的UnRAR源代碼來看,現在WinRAR的解壓思路明顯還是把文件按順序從頭解到尾,看來當年備份恢復工具之爭的影響,還真是深遠。
二、固實(solid)壓縮方式
在壓縮演算法方面,我覺得rar格式最特色的是固實(solid)壓縮方式。WinRAR v3.42的幫助文件中對固實壓縮的說明如下:
固實壓縮文件是 RAR 的一種特殊壓縮方式存儲的壓縮文件,它把壓縮文件中的全部文件都當成一個連續數據流來看待。
這段說明其實揭示了固實壓縮格式能夠提高壓縮比的奧秘:數據壓縮的基礎是「重復」,例如aaaabbb這個字元串,裡面就有重復,如果表示為a4b3,看起來是不是變短了?這就是「數據壓縮」。「重復」是一個具有相對意義的概念,在某一范圍內看起來沒有重復,或重復不多的數據,把范圍擴大,說不定就能找到更多重復的數據了,這就是固實壓縮的奧秘。
舉一個簡單的例子:用zip和普通rar壓縮一堆jpg文件,很難壓下去,但是用固實壓縮方式的rar就可以,其原因就在於:jpg文件本身已經是壓縮格式了,單個jpg文件里很難再 找到可利用的重復數據,因此不論是用zip還是普通的rar都很難再壓縮,因為他們都將需要壓縮的文件分隔開來一個一個處理。但是對於固實rar來說,是將 所有需要壓縮的jpg文件當作一個整體來壓縮,這些jpg之間就存在重復的數據,如他們都有相同的文件頭(其中包括各種數據表)等,這就出現了可壓縮的空間。從我看到的資料來看,Flash文件也採用了類似的技術對jpg進行壓縮:如果在Flash文件中使用了多個jpg文件,它們可以共用一個文件頭。
當然天下不會有白吃的午餐,固實壓縮方式在提高壓縮比的同時,也有一些限制,在WinRAR v3.42幫助文件中的說法是:
固實壓縮可增加壓縮性能,特別是在添加大量的小文件的時候,但它也有一些重要的不利因素
對已存在的固實壓縮文件更新時較慢;
要從固實的壓縮文件解壓單個文件時,它之前的文件都需先經過分析。這造成當從固實的壓縮文件內取出文件時會比一般壓縮文件取出文件慢一些。但是,當從固實的壓縮文件解壓全部的文件時,解壓速度並沒有影響。
如果在固實壓縮文件中的任何文件損壞了,要從損壞的范圍中解壓全部的文件是不可能的。因此,如果固實壓縮文件是保存在例如軟盤等媒介時,推薦你在製作時使用「恢復記錄」。
固實壓縮的適用場合為
壓縮文件很少更新的時候;
不需要經常從壓縮文件中解壓一個文件或是部分文件的時候;
壓縮效率比壓縮速度更為重要的時候。
與前面說的「隨機訪問」對應,固實壓縮的RAR文件可能是世界上最不適合隨機訪問的:如果需要訪問固實RAR包中的某個文件,就要從文件頭開始解壓,一直解到這個文件。
三、安全性
這里的安全性包含幾個方面的含義:文件系統安全性、密碼保護安全性和文件數據安全性。
由於制訂zip格式規范的時候操作系統本身的文件安全性還沒有引起足夠的重視,因此zip格式只記錄最基本的文件屬性,包括只讀屬性等,沒有其它附加的安全屬性。
rar格式剛推出的時候,文件系統的安全性只能參照DOS,和zip差不多。但是rar畢竟是一種封閉的格式,想怎麼改作者一個人說了就算,因此當Windows中出現NTFS,並且引入擴展的文件系統安全屬性時,rar也積極跟進,所以現在應該說rar格式在這方面比zip強 。
在zip和rar格式中均提供了密碼保護功能,但是密碼保護的安全強度不同。
zip由於格式開放、代碼開源,因此zip密碼破解軟體出現得比較早,也比較多。初期以暴力破解為主,威脅不大,真正對zip密碼安全的致命一擊是known plain text(已知明文)攻擊法:如果知道加密zip文件中某段內容(密文,ciphertext)解密後的真正內容(明文,plain text),就可以反推出zip加密口令。在這種攻擊方法的威脅,及某些國家的法律對密碼技術的限制下, 著名開源組織zlib宣布永久放棄對加密zip的支持,詳見zlib網站上的相關說明(不過在zlib發行的源代碼里仔細找找,還是能找到原來的加解密相關代碼)。
記得rar剛推出的時候也和zip一樣,雖然不能列出加密文件中的文件內容,但可以列出加密文件中的文件名。後來大概也是被known plain text攻擊法嚇到了,增加了一個「加密文件名」選項,乾脆連加密rar文件里有哪些文件都看不見,讓攻擊者想猜明文都無從猜起。
rar格式比zip晚推出,在安全方面吸取了足夠的教訓,因此採用的是美國國家標准與技術局(National Institute of Standard and Technology, NIST)推薦的、目前公認安全程度比較高的AES對稱加密演算法 ,密鑰長度128位。在ASE被攻破以前(NIST認為30年內無法攻破),大家都只能在暴力法上兜圈子,所以密碼安全性應該說比zip高。對此WinRAR 3.42的幫助文件是這樣描述的:
ZIP 格式使用私有加密演算法。 RAR 壓縮文件使用更強大的 AES-128 標准加密。如果你需要加密重要的信息,選擇 RAR 壓縮文件格式會比較好一些。為了確實的安全性,密碼長度請最少要 8 個字元。不要使用任何語言的單詞作為密碼,最好是任意的隨機組合字元和數字,並且要注意密碼的大小寫。請記住,如果你遺失你的密碼,你將無法取出加密的文件,就算是 WinRAR 的作者本身也無法解壓加密過的文件。
在數據安全性方面,RAR格式本身支持一種特殊的附加信息類型,叫做「恢復記錄」。如果RAR文件有恢復記錄,在介質物理損壞或其它原因造成數據丟失時,WinRAR可以按照「恢復記錄」嘗試對數據進行修復。而zip格式無恢復記錄,因此在數據安全性方面應該說比RAR弱。
雖然RAR文件本身支持恢復記錄,但是在WinRAR里此選項預設是關閉的,而打開後會導致壓縮出來的RAR文件體積增加(增加的百分比與設置有關),可能會令某些人感到不習慣(我就親眼見到有人在論壇上抱怨為什麼壓出來的RAR文件會如此龐大),所以這個功能基本上形同虛設。
四、開放性
開放性的對比很明顯:zip格式不僅文件格式完全公開,而且有專門的開源組織提供操作源代碼,跨平台使用也沒有多大限制;rar格式完全保密,作者只提供解壓所需源代碼,不提供壓縮所需源代碼 ,跨平台使用有點麻煩。
zip開源組織中,最出名的是zlib和InfoZip,二者各有側重:zlib偏重對內存緩沖區的壓縮,因此被png等開源組織用做內部壓縮演算法,連java的jar程序內核都來自zlib,打出來的jar包自然也是一個標準的zip文件;InfoZip偏重對文件的操作 (包括口令保護),應用似乎不如zlib廣泛,但我個人覺得其實它還是滿好用的,前提是需要對它的源代碼進行一些必要的修改。
在png組織的網頁中有說到png格式的來歷,我覺得也很有意思:做png的一班人,其實原來都是做gif格式的,但是由於Unisys公司開始對gif格式的核心——LZW壓縮演算法徵收專利費,這幫人怒了,乾脆提出png格式:大結構方面還是採用分段結構,但是核心壓縮演算法採用開源的zlib,壓縮 效果在多數情況下比gif的LZW更強。由於沒有版許可權制,在靜態圖形領域png得到廣泛應用,如果不是及時提出動畫支持並因此在web上大行其道,我估計gif早就死掉了。
RAR的解壓源代碼在其官方網站www.rarlab.com上提供,通常比WinRAR的正式版本晚一點,不過據說是直接從WinRAR的源代碼中摳出來的,所以兼容性應該沒有什麼問題。
五、結論
以下觀點純屬個人觀點,僅供參考,不具有如何指導意義:
如果經常需要對壓縮包進行隨機訪問,應該選zip而不是rar。雖然將下載到的rar重新壓縮成zip會麻煩一次,但是以後會減少無數的麻煩。
如果需要分卷壓縮(如某些網站對上傳文件大小有限制),則只能用rar。事實上,這也是我唯一會使用rar格式的場合,其它時候一律zip沒商量。
『叄』 zlib干什麼用的,求高手指點,最好能說的詳細形象點,謝謝了
import zlib zlib簡單理解就是解壓壓縮演算法 我以前看過類似it文章 反正意思肯定差不多
『肆』 是否能用delphi的zlib解壓java gzip壓縮的字元串
可以使用 delphi 與 java 完成數據壓縮還原的交通。
不管是 java還是 delphi,演算法都有現成的控制項,關鍵是要使用同樣的壓縮協議。請參考以下資料:
在Java與Delphi間交互實現Zlib壓縮演算法
http://blog.csdn.net/hexingyeyun/article/details/8678154
『伍』 zip、bzip、lzma和ZLib如果極限壓縮的話,那種壓縮率最高除這幾種之外,還有沒有壓縮率更高的壓縮方式
LZMA和ZLIB壓縮測試:
輸出結果:
zlib壓縮:255ms size:5.08MB
zlib解壓:12ms
lzma壓縮:1974ms size:5.11MB
lzma解壓:399ms
LZMA.AS解壓:27381ms
這結果真讓人大失所望,不知道是不是測試的有問題,沒有更小,反而更大了。而且解壓時間長了幾十倍。as版的LZMA解壓時間更是無法接受。還是繼續用zlib吧。
ZLIB最高
『陸』 如何用硬體加速技術為CPU減負
如何用硬體加速技術為CPU減負
一、背景介紹
通用處理器(CPU)的摩爾定律已入暮年,而機器學習和Web服務的規模卻在指數級增長。伴隨著當今硬體技術的成熟發展,普通CPU無論是在計算能力,還是資源成本上相對於一些專用硬體已經沒有絕對優勢,這也促使硬體加速技術得到各大公司的青睞,譬如三大互聯網巨頭網路、阿里、騰訊內部的接入層採用類似KeyLess方案來加速HTTPS的卸載,不僅提高了用戶體驗,還節省了機器成本。根據當前調研結果發現:目前業內各大公司接入層針對於Gzip採用硬體加速還是一片空白,阿里接入層首次結合硬體加速技術卸載Gzip不僅帶來了性能提升,而且對業界在此領域的發展也有重大影響意義。
接入層Tengine當前性能瓶頸是CPU,譬如Gzip模塊在Tengine中CPU佔比高達15%-20%左右,相比於其它模塊CPU消耗高、佔比呈增長趨勢(後端應用壓縮邏輯後續統一前置接入層)、且集中,所以Gzip模塊使用硬體卸載對於性能提升、成本優化是不可或缺。
二、分析與調研
分析前先簡單介紹下什麼是硬體加速: 硬體加速(HardwareAcceleration)就是利用硬體模塊來替代軟體演算法以充分利用硬體所固有的快速特性(硬體加速通常比軟體演算法的效率要高),從而達到性能提升、成本優化目的,當前主要是如下兩大加速方式:
FPGA 現場可編程門陣列,可針對某個具體的軟體演算法進行定製化編程,譬如業內的智能網卡;
ASIC 專用集成電路,它是面向專門用途的電路、專門為一個用戶設計和製造的,譬如Intel的QAT卡僅支持特定加減密、壓縮演算法;
FPGA與ASIC的對比如下表格所示:
結論
綜上數據對比,當qps為10k左右時Tengine Gzip使用QAT加速後CPU節省15%左右,且Gzip基本上完全卸載、隨著其佔比變高,優化效果將越好。
五、總結
接入層Tengine Gzip硬體加速項目是阿里存儲技術Tair&Tengine團隊及伺服器研發計算團隊與英特爾數據中心網路平台團隊齊心協力下的產物,不僅帶來了性能提升,而且使得接入層在硬體加速領域再次打下了堅實的基礎、為明年SSL+Gzip架構上整合做好了沉澱,同時也填充了業內接入層對Gzip採用硬體加速的空白,對此領域的發展具有一定的影響意義
『柒』 壓縮文件*.rar和*.zip的區別 用哪個好詳細介紹謝謝
樓上的見解比較狹隘。我來全面的解釋一下。
一、目錄表(TOC)與分卷(Volume)
拋開壓縮演算法不談,我認為zip、rar在文件格式上最大的差異就在目錄表(Table of Contents,TOC):zip有TOC,而rar沒有。
TOC這個詞其實是從出版界借用過來的,指的就是每一本書正文前面的「目錄」,它的作用地球人都知道:如果想快速找到書中某一內容,可以先查TOC,然後按照TOC指明的頁碼直接翻即可。
在紙質書里TOC是印刷出來的一張表,而在電子文件里則是由結構化數據構成的一張表,它的目的同樣是為了快速定位:如果想找文件中的某一內容,可以先查TOC,知道感興趣的內容在文件的什麼位置,直接跳過去就行了。最常見的運用就是avi、rm等多媒體文件:播放的時候經常有人在播放條上點來點去跳著看(即「隨機訪問」),如果沒有TOC,在長達幾百兆的文件里來回定位會慢死。
具體到zip文件里,TOC是放在文件尾部的一張表,裡面列出了zip包中每一個文件的屬性(文件名、長度等)和在zip包中的存放位置。如果需要隨機訪問zip包中的某一個文件,只需在TOC里找到這個文件的存放位置,直接跳過去即可。
而RAR文件里則沒有TOC,在文件頭之後所有文件按順序連續存放。
這種差異造成的結果就是:隨機訪問時zip比rar快,而順序訪問時rar比zip快。
所謂隨機訪問,就是前面說過的隨機訪問壓縮包中某個指定的文件。舉一個簡單的例子:一本反編譯或下載到的網頁電子書,有大量HTML、圖像、css、js,然後打成壓縮包。現在要求在不解包的情況下訪問其中的頁面:可以想像,打開每個HTML頁面的時候,它所附帶的圖像、css、js等文件可能隨機分布在整個壓縮包里,如果沒有TOC,查找每個文件的時候都要從頭開始找,將會有多慢。 所以各位可以理解為什麼jar包就是標准zip包,而我也只用zip格式保存反編譯出來的電子書、漫畫、PDG書等一切可能需要隨機訪問的東西。
所謂順序訪問,就是將整個壓縮包從頭解到尾。在這方面RAR具有天然的優勢。而且為了節省WinRAR列文件的時間,對於單個RAR我一般都直接通過右鍵菜單解壓縮,很少雙擊壓縮包打開再解壓。
由於rar的原作者已經去世,造成這種差異的確切原因我相信已不可考,但我個人猜測可能與DOS時代的備份軟體之爭有關:在DOS時代,電腦硬碟不像現在這樣奢侈,20MB就算很大了。這樣的容量用兩盒軟盤 即可備份,備份成本相對數據本身的價值來說非常低廉。因此在DOS時代,很多公司和機構都制定有定期硬碟備份政策,以免因為人為或非人為的因素 (早期硬碟可沒有如今可靠)而造成不可挽回的數據損失。在備份軟體方面,雖然微軟已經隨DOS提供了BackupRestore工具,但是他們基本不具備數據壓縮能力,因此在壓縮軟體中提供備份功能,就成為DOS時代的一個時尚。由於DOS時代的備份介質多為軟盤,因此壓縮 軟體的備份功能其實就轉化成如今很常見的一個功能:分卷壓縮功能,即按照軟盤容量進行分卷壓縮,然後將分卷壓縮文件備份(Backup)到軟盤,需要的時候再解壓,或恢復(Restore)到硬碟。
DOS時代最有名的zip工具是pkzip,出現得比DOS版的RAR早。在分卷壓縮時,pkzip按照zip文件規范,將TOC存放在最後,即存儲在最後一卷,由此帶來如下問題:
1、恢復時,每解壓一張盤,都要先將最後一張盤插進去一次,讀一次TOC。
2、只要最後一張盤上的TOC壞了,就算其它盤都是好的,也不能正常解壓。
這兩個缺點,尤其是第一個缺點實在是太臭名昭著了,因此當時出現了非常強烈的改革呼聲。在這個關鍵時刻,DOS版的RAR出現了:不僅壓縮率比pkzip高(這點在DOS時代非常重要,畢竟軟盤又貴容量又小),而且由於吸取了當時對zip格式的批評,取消了TOC,因此:
1、在恢復分卷壓縮的備份文件時,不需要頻繁插入帶有TOC的分卷,按順序換盤即可。
2、即使某個分卷損壞,也可以跳過,從完好的分卷再開始解壓。
由於這些原因(當然還有其它原因),RAR推出後迅速取得了成功,pkzip在DOS時代就開始流失用戶,到Windows時代基本消聲匿跡。在Windows時代推出的Winzip,則徹底放棄了分卷壓縮功能(zip格式永遠的痛?)。 而從我看到的源自WinRAR的UnRAR源代碼來看,現在WinRAR的解壓思路明顯還是把文件按順序從頭解到尾,看來當年備份恢復工具之爭的影響,還真是深遠。
二、固實(solid)壓縮方式
在壓縮演算法方面,我覺得rar格式最特色的是固實(solid)壓縮方式。WinRAR v3.42的幫助文件中對固實壓縮的說明如下:
固實壓縮文件是 RAR 的一種特殊壓縮方式存儲的壓縮文件,它把壓縮文件中的全部文件都當成一個連續數據流來看待。
這段說明其實揭示了固實壓縮格式能夠提高壓縮比的奧秘:數據壓縮的基礎是「重復」,例如aaaabbb這個字元串,裡面就有重復,如果表示為a4b3,看起來是不是變短了?這就是「數據壓縮」。「重復」是一個具有相對意義的概念,在某一范圍內看起來沒有重復,或重復不多的數據,把范圍擴大,說不定就能找到更多重復的數據了,這就是固實壓縮的奧秘。
舉一個簡單的例子:用zip和普通rar壓縮一堆jpg文件,很難壓下去,但是用固實壓縮方式的rar就可以,其原因就在於:jpg文件本身已經是壓縮格式了,單個jpg文件里很難再 找到可利用的重復數據,因此不論是用zip還是普通的rar都很難再壓縮,因為他們都將需要壓縮的文件分隔開來一個一個處理。但是對於固實rar來說,是將 所有需要壓縮的jpg文件當作一個整體來壓縮,這些jpg之間就存在重復的數據,如他們都有相同的文件頭(其中包括各種數據表)等,這就出現了可壓縮的空間。從我看到的資料來看,Flash文件也採用了類似的技術對jpg進行壓縮:如果在Flash文件中使用了多個jpg文件,它們可以共用一個文件頭。
當然天下不會有白吃的午餐,固實壓縮方式在提高壓縮比的同時,也有一些限制,在WinRAR v3.42幫助文件中的說法是:
固實壓縮可增加壓縮性能,特別是在添加大量的小文件的時候,但它也有一些重要的不利因素
對已存在的固實壓縮文件更新時較慢;
要從固實的壓縮文件解壓單個文件時,它之前的文件都需先經過分析。這造成當從固實的壓縮文件內取出文件時會比一般壓縮文件取出文件慢一些。但是,當從固實的壓縮文件解壓全部的文件時,解壓速度並沒有影響。
如果在固實壓縮文件中的任何文件損壞了,要從損壞的范圍中解壓全部的文件是不可能的。因此,如果固實壓縮文件是保存在例如軟盤等媒介時,推薦你在製作時使用「恢復記錄」。
固實壓縮的適用場合為
壓縮文件很少更新的時候;
不需要經常從壓縮文件中解壓一個文件或是部分文件的時候;
壓縮效率比壓縮速度更為重要的時候。
與前面說的「隨機訪問」對應,固實壓縮的RAR文件可能是世界上最不適合隨機訪問的:如果需要訪問固實RAR包中的某個文件,就要從文件頭開始解壓,一直解到這個文件。
三、安全性
這里的安全性包含幾個方面的含義:文件系統安全性、密碼保護安全性和文件數據安全性。
由於制訂zip格式規范的時候操作系統本身的文件安全性還沒有引起足夠的重視,因此zip格式只記錄最基本的文件屬性,包括只讀屬性等,沒有其它附加的安全屬性。
rar格式剛推出的時候,文件系統的安全性只能參照DOS,和zip差不多。但是rar畢竟是一種封閉的格式,想怎麼改作者一個人說了就算,因此當Windows中出現NTFS,並且引入擴展的文件系統安全屬性時,rar也積極跟進,所以現在應該說rar格式在這方面比zip強 。
在zip和rar格式中均提供了密碼保護功能,但是密碼保護的安全強度不同。
zip由於格式開放、代碼開源,因此zip密碼破解軟體出現得比較早,也比較多。初期以暴力破解為主,威脅不大,真正對zip密碼安全的致命一擊是known plain text(已知明文)攻擊法:如果知道加密zip文件中某段內容(密文,ciphertext)解密後的真正內容(明文,plain text),就可以反推出zip加密口令。在這種攻擊方法的威脅,及某些國家的法律對密碼技術的限制下, 著名開源組織zlib宣布永久放棄對加密zip的支持,詳見zlib網站上的相關說明(不過在zlib發行的源代碼里仔細找找,還是能找到原來的加解密相關代碼)。
記得rar剛推出的時候也和zip一樣,雖然不能列出加密文件中的文件內容,但可以列出加密文件中的文件名。後來大概也是被known plain text攻擊法嚇到了,增加了一個「加密文件名」選項,乾脆連加密rar文件里有哪些文件都看不見,讓攻擊者想猜明文都無從猜起。
rar格式比zip晚推出,在安全方面吸取了足夠的教訓,因此採用的是美國國家標准與技術局(National Institute of Standard and Technology, NIST)推薦的、目前公認安全程度比較高的AES對稱加密演算法 ,密鑰長度128位。在ASE被攻破以前(NIST認為30年內無法攻破),大家都只能在暴力法上兜圈子,所以密碼安全性應該說比zip高。對此WinRAR 3.42的幫助文件是這樣描述的:
ZIP 格式使用私有加密演算法。 RAR 壓縮文件使用更強大的 AES-128 標准加密。如果你需要加密重要的信息,選擇 RAR 壓縮文件格式會比較好一些。為了確實的安全性,密碼長度請最少要 8 個字元。不要使用任何語言的單詞作為密碼,最好是任意的隨機組合字元和數字,並且要注意密碼的大小寫。請記住,如果你遺失你的密碼,你將無法取出加密的文件,就算是 WinRAR 的作者本身也無法解壓加密過的文件。
在數據安全性方面,RAR格式本身支持一種特殊的附加信息類型,叫做「恢復記錄」。如果RAR文件有恢復記錄,在介質物理損壞或其它原因造成數據丟失時,WinRAR可以按照「恢復記錄」嘗試對數據進行修復。而zip格式無恢復記錄,因此在數據安全性方面應該說比RAR弱。
雖然RAR文件本身支持恢復記錄,但是在WinRAR里此選項預設是關閉的,而打開後會導致壓縮出來的RAR文件體積增加(增加的百分比與設置有關),可能會令某些人感到不習慣(我就親眼見到有人在論壇上抱怨為什麼壓出來的RAR文件會如此龐大),所以這個功能基本上形同虛設。
四、開放性
開放性的對比很明顯:zip格式不僅文件格式完全公開,而且有專門的開源組織提供操作源代碼,跨平台使用也沒有多大限制;rar格式完全保密,作者只提供解壓所需源代碼,不提供壓縮所需源代碼 ,跨平台使用有點麻煩。
zip開源組織中,最出名的是zlib和InfoZip,二者各有側重:zlib偏重對內存緩沖區的壓縮,因此被png等開源組織用做內部壓縮演算法,連java的jar程序內核都來自zlib,打出來的jar包自然也是一個標準的zip文件;InfoZip偏重對文件的操作 (包括口令保護),應用似乎不如zlib廣泛,但我個人覺得其實它還是滿好用的,前提是需要對它的源代碼進行一些必要的修改。
在png組織的網頁中有說到png格式的來歷,我覺得也很有意思:做png的一班人,其實原來都是做gif格式的,但是由於Unisys公司開始對gif格式的核心——LZW壓縮演算法徵收專利費,這幫人怒了,乾脆提出png格式:大結構方面還是採用分段結構,但是核心壓縮演算法採用開源的zlib,壓縮 效果在多數情況下比gif的LZW更強。由於沒有版許可權制,在靜態圖形領域png得到廣泛應用,如果不是及時提出動畫支持並因此在web上大行其道,我估計gif早就死掉了。
RAR的解壓源代碼在其官方網站www.rarlab.com上提供,通常比WinRAR的正式版本晚一點,不過據說是直接從WinRAR的源代碼中摳出來的,所以兼容性應該沒有什麼問題。
五、結論
以下觀點純屬個人觀點,僅供參考,不具有如何指導意義:
如果經常需要對壓縮包進行隨機訪問,應該選zip而不是rar。雖然將下載到的rar重新壓縮成zip會麻煩一次,但是以後會減少無數的麻煩。
如果需要分卷壓縮(如某些網站對上傳文件大小有限制),則只能用rar。事實上,這也是我唯一會使用rar格式的場合,其它時候一律zip沒商量。
『捌』 Zlib的compress、uncompress問題,請教一下!
1. lz77演算法對於過小的數據本身性能就不好,導致壓縮率極低
2. deflate演算法用的靜態huffman演算法,會引入額外數據
3. deflate演算法本身也需要維護數據的額外數據
最終導致壓縮結果比壓縮前更大。
因為壓縮的緩沖區沒申請購,導致堆出錯,所以delete的時候會崩潰。
『玖』 壓縮殼的壓縮原理
把文件的二進制代碼壓縮,把相鄰的0,1代碼減少,比如有000000,可以把它變成6個0 的寫法60,來減少該文件的空間。
由於計算機處理的信息是以二進制數的形式表示的,因此壓縮軟體就是把二進制信息中相同的字元串以特殊字元標記來達到壓縮的目的。所有的計算機文件歸根結底都是以「1」和「0」的形式存儲的,和藍色像點一樣,只要通過合理的數學計算公式,文件的體積都能夠被大大壓縮以達到「數據無損稠密」的效果。
壓縮可以分為有損和無損壓縮兩種。如果丟失個別的數據不會造成太大的影響,這時忽略它們是個好主意,這就是有損壓縮。有損壓縮廣泛應用於動畫、聲音和圖像文件中,典型的代表就是影碟文件格式mpeg、音樂文件格式mp3和圖像文件格式jpg。但是更多情況下壓縮數據必須准確無誤,人們便設計出了無損壓縮格式,比如常見的zip、rar等。
壓縮軟體(compression software)自然就是利用壓縮原理壓縮數據的工具,壓縮後所生成的文件稱為壓縮包(archive),體積只有原來的幾分之一甚至更小。當然,壓縮包已經是另一種文件格式了,如果想使用其中的數據,首先得用壓縮軟體把數據還原,這個過程稱作解壓縮。常見的壓縮軟體有winzip、winrar等。
『拾』 二進制壓縮演算法有哪些
二進制數據壓縮演算法二進制是計算技術中廣泛採用的一種數制。二進制數據是用0和1兩個數碼來表示的數。它的基數為2,進位規則是「逢二進一」,借位規則是「借一當二」,由18世紀德國數理哲學大師萊布尼茲發現。當前的計算機系統使用的基本上是二進制系統,數據在計算機中主要是以補碼的形式存儲的。計算機中的二進制則是一個非常微小的開關,用「開」來表示1,「關」來表示0。
20世紀被稱作第三次科技革命的重要標志之一的計算機的發明與應用,因為數字計算機只能識別和處理由『0』。『1』符號串組成的代碼。其運算模式正是二進制。19世紀愛爾蘭邏輯學家喬治布爾對邏輯命題的思考過程轉化為對符號「0『』。『』1『』的某種代數演算,二進制是逢2進位的進位制。0、1是基本算符。因為它只使用0、1兩個數字元號,非常簡單方便,易於用電子方式實現。
二進制壓縮
在編程時遇到每個數據只有兩種狀態,且 dfs 或者 bfs 時遍歷時間復雜度高時,可以採用二進制壓縮數據,尤其是二維數組。LZFSE
1,zlib和gzip都對deflate進行了封裝,比deflate多了數據頭和尾
1,蘋果開源了新的無損壓縮演算法 LZFSE ,該演算法是去年在iOS 9和OS X 10.10中 引入 的。按照蘋果公司的說法,LZFE的壓縮增益和ZLib level 5相同,但速度要快2~3倍,能源效率也更高。
LZFSE基於Lempel-Ziv,並使用了 有限狀態熵編碼,後者基於Jarek Duda在
非對稱數字系統(ANS)方面所做的熵編碼工作。簡單地講,ANS旨在「終結速度和比率的平衡」,既可以用於精確編碼,又可以用於快速編碼,並且具有數據加密功能。使用ANS代替更為傳統的
Huffman和 算術編碼方法的壓縮庫 越來越多,LZFSE就位列其中。
顯然,LZFSE的目標不是成為最好或最快的演算法。事實上,蘋果公司指出,
LZ4的壓縮速度比LZFSE快,而 LZMA提供了更高的壓縮率,但代價是比Apple
SDK提供的其他選項要慢一個數量級。當壓縮率和速度幾乎同等重要,而你又希望降低能源效率時,LZFSE是蘋果推薦的選項。
GitHub上提供了LZFSE的參考實現。在MacOS上構建和運行一樣簡單:
$ xcodebuild install DSTROOT=/tmp/lzfse.dst
如果希望針對當前的iOS設備構建LZFSE,可以執行:
xcodebuild -configuration 「Release」 -arch armv7 install DSTROOT=/tmp/lzfse.dst
除了 API文檔之外,蘋果去年還提供了一個 示例項目,展示如何使用LZFSE 進行塊和流壓縮,這是一個實用的LZFSE入門資源。
LZFSE是在谷歌 brotli之後發布的,後者在去年開源。與LZFSE相比,brotli 似乎是針對一個不同的應用場景進行了優化,比如壓縮靜態Web資產和Android APK,在這些情況下,壓縮率是最重要的。