MD5演算法是如何工作的?
計算訊息摘要的過程如下:
步驟1 - 追加填充位 - 訊息以某種方式繼續或填充,使其總長度(以位元為單位)對512取模的結果為448。即使訊息的長度(以位元為單位)最初對512取模的結果為448,此操作也會持續執行。448 + 64 = 512,因此訊息的填充方式使其長度現在比512的整數倍少64位。
步驟2 - 追加長度 - 將原始訊息M的長度(以位元為單位,在插入填充位之前)的64位描述新增到步驟1的結果中。如果原始訊息的長度大於264 = 184 467 440 73 709 551 616,則僅使用訊息M長度的低64位。
因此,該欄位包含原始訊息M對264取模的結果。這些位作為兩個32位字新增,並先新增低位(最低有效位)字。步驟1和步驟2的結果是一條訊息,其長度(以位元為單位)是512位的整數倍。
步驟3 - 初始化MD緩衝區 - 一個128位的緩衝區可用於儲存MD5雜湊演算法的中間結果和最終結果。一個四字緩衝區(A、B、C和D)可用於計算訊息摘要。因此,每個A、B、C、D都是一個32位的暫存器。
這些暫存器以十六進位制啟動,低位位元組優先:
字A:01 23 45 67
字B:89 ab cd ef
字C:fe dc ba 98
字D:76 54 32 10
步驟4 - 以512位(16字)塊處理訊息 - 壓縮函式包括四輪處理。每一輪都將當前正在處理的512位塊(Yq)和128位緩衝區值ABCD作為輸入,並更新緩衝區的元素。
它可以描述四個輔助函式,每個函式都將三個32位字作為輸入,並生成一個32位字作為輸出。
F (X, Y, Z) = XY v not (X) Z
G (X, Y, Z) = XZ v Y not (Z)
H (X, Y, Z) = X xor Y xor Z
I (X, Y, Z) = Y xor (X v not (Z))
在每個位元位置,F充當條件:如果X則Y否則Z。函式F可以使用+而不是v來表示,因為XY和not X(Z)永遠不會在相同的位元位置有1。
步驟5 - 輸出 - 訊息摘要生成一個輸出,包括A、B、C、D。最終輪的輸出是128位的雜湊結果或訊息摘要,它可以在遞增處理訊息的所有t個512位塊後獲得。