Md5

了解 MD5 中使用的長度 b

  • January 12, 2016

我試圖從連結http://www.ietf.org/rfc/rfc1321.txt了解 MD5 雜湊算法

起初我無法理解 MD5 的填充。然後我在這個連結中問了一個問題:To understand a fact related to padding in MD5

從這個答案我可以理解填充。現在我又面臨另一個問題:理解MD5的第二步。

我試圖從同一連結了解第二步:http ://www.ietf.org/rfc/rfc1321.txt

但是我沒有像以前那樣理解一個句子和一個片語。下面是這句話:

b 的 64 位表示

64 位表示代表什麼?

這是下一句話:

萬一 b 大於 2^64,則僅使用 b 的低 64 位。

低位是什麼意思?

誰能更清楚地解釋上述片語和句子?

64 位表示代表什麼?

它是散列消息的長度(以位為單位),表示為 64 位二進制值(以小端序)。如果您散列 1 個字元的消息, $ b=8 $ (作為 1 個字節 == 8 位);這將表示為 8 個字節08 00 00 00 00 00 00 00(首先是 08,因為在 little-endian 順序中,您首先放置最不重要的部分)

低位是什麼意思?

的長度 $ b $ 填充內的欄位長度為 8 個字節;如果您要散列一條極長的消息(一個 $ 2^{61} $ 字節或更長),可能是這種情況 $ b $ 不適合 8 字節欄位。在這種情況下,您放入欄位中的是欄位中最低的 8 個字節;另一種表達方式是您將價值 $ b \bmod 2^{64} $ 進入填充欄位。

另一方面, $ 2^{61} $ 字節是海量數據;它大約是一天內通過網際網路在全球範圍內流動的數據量。您(或其他任何人)不太可能在這麼多數據上計算 MD5 散列;你可以在實踐中忽略這句話。

如果您的消息長於 $ 2^{64} $ 位,即 $ b>2^{64} $ ,即 $ 2^{61} $ 字節,或 16,777,216 太字節(!),這超過 1600 萬太字節,您只需取數字的最低有效 64 位 $ b $ .

引用自:https://crypto.stackexchange.com/questions/31878