了解 MD5 中使用的長度 b
我試圖從連結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 $ .