2010-09-13 59 views

回答

5

填充過程不得創建衝突。如果你有一個消息它被填充到下午,其中有512的長度多現在想象下午作爲消息米」本身,即已加入,好像他們是部分填充比特的消息。如果填充只是保持米'不變,如你所建議的那樣,然後米'將產生相同的哈希值,即使它們是不同的消息。那將是一場碰撞,也被稱爲「不好」。

一般來說,填充過程必須是可以明確刪除的填充過程:您必須能夠查看填充的消息,並毫不猶豫地決定哪些位來自消息本身,哪些添加爲填充。在散列函數過程中沒有任何東西實際上刪除填充,但它在概念上必須是可行的。如果512的長度倍數的消息通過根本不加任何位而被「填充」,則這在數學上是不可能的。

以上是所有散列函數的通用方法。 MD5和一些常見系列的一些功能(包括SHA-1,SHA-256 ...),使用Merkle-Damgård construction,還需要在填充中編碼輸入數據長度(這是實現一些安全性證明所必需的) 。在MD5中,長度被編碼爲64位數字。使用'1'位,任何消息至少有65個填充位(最多511位)。

+0

非常感謝。這是我正在尋找的答案 – pclem12 2010-09-15 02:43:13

+0

@Thomas Pornin你能否告訴我爲什麼是第一個填充位1而不是全零?第一位必然是1還有什麼特別的原因嗎? – BarbaraKwarc 2017-01-08 04:03:37

1

消息被填充以便長度可以被512整除。請記住,它是正在計算哈希的消息的位表示。由於消息需要分解爲512位塊,所以額外的位被添加爲填充。查看Wiki上的Algorithm部分了解更多詳情。

+0

是的,我知道這一點,但如果它已經是512-64位長呢?你在64中添加了消息長度,現在它可以被512整除。但是不用這個,你仍然需要在中間填充額外的512位。填充的目的是什麼,它已經可以被512整除而沒有填充? – pclem12 2010-09-13 15:02:20

+0

如果我理解你說的正確,你說的是,如果消息是(512-64)位長,爲什麼應該添加任何填充?接下來的64位將是消息的長度,以64位整數表示,所以爲什麼要添加填充。我是否理解你的問題?如果是這樣,當你說在中間增加了一個額外的512位時,是否指任何實現? – Gangadhar 2010-09-14 00:13:33

+0

抱歉沒有迅速回復...忙,但是這就是我想要的,Thomas Pornin在下面回答了它 – pclem12 2010-09-15 02:44:14

相關問題