2011-08-27 506 views
4

我知道MD5會產生一個128位的摘要。我的問題是,它是如何從128bits +的消息產生這個固定長度的輸出?md5哈希算法如何將數據壓縮到固定長度?

編輯:

我現在有現在散列函數更深入的瞭解。在閱讀this article之後,我意識到散列函數是單向的,這意味着你不能將散列轉換回明文。我可能因爲所有在線服務將它們轉換回字符串而導致錯誤表達,但我意識到這只是彩虹表(將字符串的集合映射到預先計算的散列)。

回答

7

當您生成MD5 hash時,您並未壓縮輸入數據。壓縮意味着您可以將其解壓縮回原始狀態。另一方面,MD5是一個單向過程。這就是爲什麼它用於密碼存儲;理想情況下,您必須知道原始輸入字符串才能夠再次生成相同的MD5結果。

此頁面提供MD5和類似的散列函數的一個不錯的圖形配備的解釋,以及如何使用它們:An Illustrated Guide to Cryptographic Hashes

+2

那麼,希望一個*不*使用密碼的MD5(或者根本就是因爲現在有很多替代/更好的選擇),但總體思路是相同的+1 ;-) – 2011-08-27 04:52:41

+0

術語[壓縮] (https://secure.wikimedia.org/wikipedia/en/wiki/One-way_compression_function)用於描述密碼散列函數,但它意味着與通常的Zip/Bzip/7Zip含義不同。 –

1

它已經注意到(或更好,很少)做壓縮。有一個algorithm它爲每個初始狀態和字節產生一個新的狀態。這種狀態或多或少地獨特於這種輸入組合。

1

總之,它會分裂成許多部分,並進行操作。

如果您對collsion感興趣,請考慮您的郵件只能閱讀。

位空間比可讀字符空間大得多。

3

考慮類似於以128位值開始,並一次取128位輸入,並將每個輸入塊與現有值異或的情況。

MD5比這要複雜得多,但總體思路是一樣的:輸入一次處理128位。每個輸入塊都可以更改結果的值,但對長度沒有影響。

+0

但是,如果消息大於最大散列摘要大小(MD5 128位)的?那它做了什麼? – liamzebedee

+1

算法將消息拆分爲塊,然後將每個塊混合成一個一個的散列。整個消息有助於散列的最終值,但算法一次只能查看一個塊。 –