Md5
MD5 更新函式
在
hashlib
python 的模組中有一個名為m.update()
wherem
is ahashlib.md5
object 的函式。我的問題,實際上不是特定於 python,是這個函式是如何工作的,例如:m = hashlib.md5() m.update("hello") m.update(" world")
這就像我會做的一樣:
a.hashlib.md5() a.update("hello world")
數學如何解釋這一點?
它是一個對象,而不是一個函式。區別很重要:你得到的東西
m = hashlib.md5()
是記憶體中具有內部狀態的結構。每個update()
呼叫都會更新該狀態(因此得名)。你可以想像這個物體有一個盒子。每次
update()
呼叫都會在該框中累積輸入字節。當您想獲得雜湊值時,MD5 數學函式將應用於完整的盒子內容。這樣一來,無論您將字節放入框中是作為一個還是兩個或十七個連續呼叫都無關緊要;重要的是您最終發送了框中的所有字節。從技術上講,MD5按 512 位(64 字節)的塊處理輸入數據,並保持由 128 字節(16 字節)和計數器組成的執行狀態(在函式評估結束時使用散列的字節數) . 因此,一個實際的 MD5 實現確實會包含一個“盒子”(通常稱為“緩衝區”),它可以累積多達 64 個字節;每當累積了 64 個字節時,就按照 MD5 規範對其進行處理,然後清空該框。這樣,即使您散列千兆字節的數據,該對像在 RAM 中仍然很小。
閱讀規範以實現自己的 MD5 程式碼是一個非常好的程式練習,非常有啟發性。我建議您嘗試一下。