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位塊後獲得。

更新於: 2022年3月14日

2K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告