Lempel-Ziv壓縮演算法之原理
在LZ壓縮演算法的背後是使用RLE演算法用先前出現的相同位元組序列的引用來替代。
簡單的講,LZ演算法被認為是字元串匹配的演算法。例如:在一段文本中某字元串經常出現,並且可以通過前面文本中出現的字元串指針來表示。當然這個想法的前提是指針應該比字元串本身要短。
例如,在上一段短語「字元串」經常出現,可以將除第一個字元串之外的所有用第一個字元串引用來表示從而節省一些空間。
一個字元串引用通過下面的方式來表示:
1.唯一的標記
2.偏移數量
3.字元串長度
由編碼的模式決定引用是一個固定的或變動的長度。後面的情況經常是首選,因為它允許編碼器用引用的大小來交換字元串的大小(例如,如果字元串相當長,增加引用的長度可能是值得的)。
Lempel-Ziv壓縮演算法之實現
使用LZ77的一個問題是由於演算法需要字元串匹配,對於每個輸入流的單個位元組,每個流中此位元組前面的哪個位元組都必須被作為字元串的開始從而盡可能的進行字元串匹配,這意味著演算法非常慢。
另一個問題是為了最優化壓縮而調整字元串引用的表示形式並不容易。例如,必須決定是否所有的引用和非壓縮位元組應該在壓縮流中的位元組邊界發生。
基本壓縮庫使用一個清晰的實現來保證所有的符號和引用是位元組對齊的,因此犧牲了壓縮比率,並且字元串匹配程序並不是最優化的(沒有緩存、歷史緩沖區或提高速度的小技巧),這意味著程序非常慢。
另一方面,解壓縮程序非常簡單。
一個提高LZ77速度的試驗已經進行了,這個試驗中使用數組索引來加速字元串匹配的過程。然而,它還是比通常的壓縮程序慢。
『貳』 zip 的壓縮原理與實現
文件壓縮原理
我們使用計算機所做的事情大多都是對文件進行處理。每個文件都會佔用一定的磁碟空間,我們希望一些文件,尤其是暫時不用但又比較重要不能刪除的文件(如備份文件,有點像雞肋呀),盡可能少的佔用磁碟空間。但是,許多文件的存儲格式是比較鬆散的,這樣就浪費了一些寶貴的計算機存儲資源。這時,我們可以藉助壓縮工具解決這個問題,通過對原來的文件進行壓縮處理,使之用更少的磁碟空間保存起來,當需要使用時再進行解壓縮操作,這樣就大大節省了磁碟空間。當你要拷貝許多小文件時,通過壓縮處理可以提高執行效率。如果小文件很多,操作系統要執行頻繁的文件定位操作,需要花費很多的時間。如果先把這些小文件壓縮,變成一個壓縮文件後,再拷貝時就很方便了。由於計算機處理的信息是以二進制數的形式表示的,因此壓縮軟體就是把二進制信息中相同的字元串以特殊字元標記來達到壓縮的目的。為了有助於理解文件壓縮,請您在腦海里想像一幅藍天白雲的圖片。對於成千上萬單調重復的藍色像點而言,與其一個一個定義「藍、藍、藍……」長長的一串顏色,還不如告訴電腦:「從這個位置開始存儲1117個藍色像點」來得簡潔,而且還能大大節約存儲空間。這是一個非常簡單的圖像壓縮的例子。其實,所有的計算機文件歸根結底都是以「1」和「0」的形式存儲的,和藍色像點一樣,只要通過合理的數學計算公式,文件的體積都能夠被大大壓縮以達到「數據無損稠密」的效果。總的來說,壓縮可以分為有損和無損壓縮兩種。如果丟失個別的數據不會造成太大的影響,這時忽略它們是個好主意,這就是有損壓縮。有損壓縮廣泛應用於動畫、聲音和圖像文件中,典型的代表就是影碟文件格式mpeg、音樂文件格式mp3和圖像文件格式jpg。但是更多情況下壓縮數據必須准確無誤,人們便設計出了無損壓縮格式,比如常見的zip、rar等。壓縮軟體(compression software)自然就是利用壓縮原理壓縮數據的工具,壓縮後所生成的文件稱為壓縮包(archive),體積只有原來的幾分之一甚至更小。當然,壓縮包已經是另一種文件格式了,如果你想使用其中的數據,首先得用壓縮軟體把數據還原,這個過程稱作解壓縮。常見的壓縮軟體有winzip、winrar等
『叄』 在.net中,我用AES加密方法對一串字元串進行了加密,得到了一串64位的新字元串,現在我想對這串64位的
首先,MD5不是用來壓縮的,MD5值是用來作為message authentication code,本身是不可逆的。其實這也很容易理解,因為md5值只有128 bits,表示的值范圍就在0~2^128這個區間內,而要做md5的數據是無窮的,也就是有無數的數據有相同的md5值,當然是不可能恢復原始數據了!
其次,用aes或者des或者任何安全的加密體制加密後得到的字元串,按照密碼學安全性定義,應該是偽隨機字元串,簡單地說就是看起來和隨機字元串沒有什麼區別,沒有特殊結構,沒有信息冗餘,達不到這些要求,就不是一個安全的加密體制。而字元串壓縮,就是要提取這種特殊結構或者信息冗餘,既然不存在,字元串壓縮演算法根本不會起作用!這就是為什麼平時你壓縮文本文件時壓縮比很大,因為文本冗餘度非常高!而壓縮可執行文件或者DLL時,壓縮後大小幾乎沒怎麼改觀,因為隨機程度很高,冗餘度很小!
綜上所述,用aes加密後的字元串,是不能再進行壓縮的!希望我說得夠清楚!
『肆』 如何將18位的身份證號碼,加密壓縮位5位的字元串
身份證號是由0至9和x組成的,總共11種可能,所以整個要有
11^18種(約5.559917313*10^18)
然後開5次方根,
大約5611,這就說明每一位至少要有5611種可能!
因為有18位,要變成5位,所以3.6位合一,怎麼算呢?
如果開8次方根:220,也是不可以
而Ascii字元只有127個,Unicode雖然有很多但是不是鍵盤能敲出來的(比如很多漢字、韓文、日文等等,還有符號……)所以不能實現
我只能實現6位,不知可否?
請補充問題,我會作答