首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

MD5 演算法 C# 完整實作(三):四輪壓縮轉換詳細邏輯與偽代碼

     編輯:關於C語言

步驟 5:資料塊壓縮轉換 (64 位元組 → 16 個 32 位字)

輸入訊息經填充後,以 512 位 (64 位元組) 為一區塊處理。每區塊分 16 字 X[0..15],搭配常數表 T[1..64] (T[i] = floor(2^32 * |sin(i)|),i 為弧度)。

四輪運算詳細流程

暫存器 A,B,C,D 初始化為魔術常數。每區塊儲存初值 AA,BB,CC,DD,經四輪各 16 步運算,最後加回初值。

第 1 輪 (F 函數,左旋位移 S11~S14)

[ABCD  0  7  1] [DABC  1 12  2] [CDAB  2 17  3] [BCDA  3 22  4]
[ABCD  4  7  5] [DABC  5 12  6] [CDAB  6 17  7] [BCDA  7 22  8]
[ABCD  8  7  9] [DABC  9 12 10] [CDAB 10 17 11] [BCDA 11 22 12]
[ABCD 12  7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16]

第 2 輪 (G 函數,左旋位移 S21~S24)

[ABCD  1  5 17] [DABC  6  9 18] [CDAB 11 14 19] [BCDA  0 20 20]
[ABCD  5  5 21] [DABC 10  9 22] [CDAB 15 14 23] [BCDA  4 20 24]
[ABCD  9  5 25] [DABC 14  9 26] [CDAB  3 14 27] [BCDA  8 20 28]
[ABCD 13  5 29] [DABC  2  9 30] [CDAB  7 14 31] [BCDA 12 20 32]

第 3 輪 (H 函數,左旋位移 S31~S34)

[ABCD  5  4 33] [DABC  8 11 34] [CDAB 11 16 35] [BCDA 14 23 36]
[ABCD  1  4 37] [DABC  4 11 38] [CDAB  7 16 39] [BCDA 10 23 40]
[ABCD 13  4 41] [DABC  0 11 42] [CDAB  3 16 43] [BCDA  6 23 44]
[ABCD  9  4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA  2 23 48]

第 4 輪 (I 函數,左旋位移 S41~S44)

[ABCD  0  6 49] [DABC  7 10 50] [CDAB 14 15 51] [BCDA  5 21 52]
[ABCD 12  6 53] [DABC  3 10 54] [CDAB 10 15 55] [BCDA  1 21 56]
[ABCD  8  6 57] [DABC 15 10 58] [CDAB  6 15 59] [BCDA 13 21 60]
[ABCD  4  6 61] [DABC 11 10 62] [CDAB  2 15 63] [BCDA  9 21 64]

最終加回初值

A += AA; B += BB; C += CC; D += DD;

處理完所有區塊後,A,B,C,D 即為最終雜湊值。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved