回答
填充過程不得創建衝突。如果你有一個消息米它被填充到下午,其中有512的長度多現在想象下午作爲消息米」本身,即已加入,好像他們是部分填充比特的消息。如果填充只是保持米'不變,如你所建議的那樣,然後米和米'將產生相同的哈希值,即使它們是不同的消息。那將是一場碰撞,也被稱爲「不好」。
一般來說,填充過程必須是可以明確刪除的填充過程:您必須能夠查看填充的消息,並毫不猶豫地決定哪些位來自消息本身,哪些添加爲填充。在散列函數過程中沒有任何東西實際上刪除填充,但它在概念上必須是可行的。如果512的長度倍數的消息通過根本不加任何位而被「填充」,則這在數學上是不可能的。
以上是所有散列函數的通用方法。 MD5和一些常見系列的一些功能(包括SHA-1,SHA-256 ...),使用Merkle-Damgård construction,還需要在填充中編碼輸入數據長度(這是實現一些安全性證明所必需的) 。在MD5中,長度被編碼爲64位數字。使用'1'位,任何消息至少有65個填充位(最多511位)。
消息被填充以便長度可以被512整除。請記住,它是正在計算哈希的消息的位表示。由於消息需要分解爲512位塊,所以額外的位被添加爲填充。查看Wiki上的Algorithm部分了解更多詳情。
是的,我知道這一點,但如果它已經是512-64位長呢?你在64中添加了消息長度,現在它可以被512整除。但是不用這個,你仍然需要在中間填充額外的512位。填充的目的是什麼,它已經可以被512整除而沒有填充? – pclem12 2010-09-13 15:02:20
如果我理解你說的正確,你說的是,如果消息是(512-64)位長,爲什麼應該添加任何填充?接下來的64位將是消息的長度,以64位整數表示,所以爲什麼要添加填充。我是否理解你的問題?如果是這樣,當你說在中間增加了一個額外的512位時,是否指任何實現? – Gangadhar 2010-09-14 00:13:33
抱歉沒有迅速回復...忙,但是這就是我想要的,Thomas Pornin在下面回答了它 – pclem12 2010-09-15 02:44:14
- 1. SHA256:填充512位長度的消息
- 2. @RequestParam究竟是什麼,它是如何得到填充的?
- 3. 什麼是Facebook牆帖的最大消息長度
- 4. 使用LINQ填充DropDownList的正確方法是什麼?
- 5. MvvmLight消息 - 註冊和取消註冊消息的正確方法是什麼?
- 6. 具有特定填充的RSA最大消息長度
- 7. 啓動spark-shell時,「已經註冊」WARN消息是什麼?
- 8. 什麼是Microsoft消息隊列(MSMQ)?它是如何工作的?
- 9. 爲什麼不是第二個正確的長度?
- 10. binascii.Error:不正確的填充,即使字符串長度的4
- 11. Actionscript/Animate - 填充下一個陣列點(如果已經填充)
- 12. SOAP消息中布爾值的正確編碼是什麼?
- 13. MSGraph發送消息的正確URI是什麼?
- 14. FIX - 確定消息長度?
- 15. 如何用已經xml格式化的請求消息填充泡沫
- 16. Spring異常消息?它是什麼?
- 17. 如果數值已經是MD5,卡桑德拉會避免計算行MD5嗎?
- 18. 填充具有嵌套列表值的詞典的正確語法是什麼?
- 19. 將填充添加到十六進制的目的是什麼?
- 20. 什麼是ASP經典session.sessionid屬性的長度?
- 21. 如果NSString stringWithContentsOfFile已被棄用,它的替代是什麼?
- 22. 經理級的目的是什麼?
- 23. Java MD5哪一個是正確的?
- 24. 結構中長度爲零的數組的目的是什麼?
- 25. 調用write()的長度爲零的後果是什麼?
- 26. 可變長度填充和填充填充梯度
- 27. 在MongoDB中預先填充數組的正確方法是什麼?
- 28. 是什麼導致DbDataAdapter.Fill使用不正確的列數填充DataSet?
- 29. 控制XAML控件從c#中填充顏色的正確方法是什麼?
- 30. 用多個數據字段填充表單的正確方法是什麼?
非常感謝。這是我正在尋找的答案 – pclem12 2010-09-15 02:43:13
@Thomas Pornin你能否告訴我爲什麼是第一個填充位1而不是全零?第一位必然是1還有什麼特別的原因嗎? – BarbaraKwarc 2017-01-08 04:03:37