md5的算法步驟
按位補充數據
在MD5算法中,首先需要對信息進行填充,這個數據按位(bit)補充,要求最終的位數對512求模的結果為448。也就是說數據補位后,其位數長度只差64位(bit)就是512的整數倍。即便是這個數據的位數對512求模的結果正好是448也必須進行補位。補位的實現過程:首先在數據后補一個1 bit; 接著在后面補上一堆0 bit, 直到整個數據的位數對512求模的結果正好為448。總之,至少補1位,而最多可能補512位 。
擴展長度
在完成補位工作后,又將一個表示數據原始長度的64 bit數(這是對原始數據沒有補位前長度的描述,用二進制來表示)補在最后。當完成補位及補充數據的描述后,得到的結果數據長度正好是512的整數倍。也就是說長度正好是16個(32bit) 字的整數倍 。
初始化MD緩存器
MD5運算要用到一個128位的MD5緩存器,用來保存中間變量和最終結果。該緩存器又可看成是4個32位的寄存器A、B、C、D,初始化為 :
A : 01 23 45 67
B: 89 ab cd ef
C: fe dc ba 98
D: 76 54 32 10
處理數據段
首先定義4個非線性函數F、G、H、I,對輸入的報文運算以512位數據段為單位進行處理。對每個數據段都要進行4輪的邏輯處理,在4輪中分別使用4個不同的函數F、G、H、I。每一輪以ABCD和當前的512位的塊為輸入,處理后送入ABCD(128位)。
輸出
信息摘要最終處理成以A, B, C, D 的形式輸出。也就是開始于A的低位在前的順序字節,結束于D的高位在前的順序字節。
md5應用
用于密碼管理
當我們需要保存某些密碼信息以用于身份確認時,如果直接將密碼信息以明碼方式保存在數據庫中,不使用任何保密措施,系統管理員就很容易能得到原來的密碼信息,這些信息一旦泄露, 密碼也很容易被破譯。為了增加安全性,有必要對數據庫中需要保密的信息進行加密,這樣,即使有人得到了整個數據庫,如果沒有解密算法,也不能得到原來的密碼信息。MD5算法可以很好地解決這個問題,因為它可以將任意長度的輸入串經過計算得到固定長度的輸出,而且只有在明文相同的情況下,才能等到相同的密文,并且這個算法是不可逆的,即便得到了加密以后的密文,也不可能通過解密算法反算出明文。這樣就可以把用戶的密碼以MD5值(或類似的其它算法)的方式保存起來,用戶注冊的時候,系統是把用戶輸入的密碼計算成 MD5 值,然后再去和系統中保存的 MD5 值進行比較,如果密文相同,就可以認定密碼是正確的,否則密碼錯誤。通過這樣的步驟,系統在并不知道用戶密碼明碼的情況下就可以確定用戶登錄系統的合法性。這樣不但可以避免用戶的密碼被具有系統管理員權限的用戶知道,而且還在一定程度上增加了密碼被破解的難度。
電子簽名
MD5 算法還可以作為一種電子簽名的方法來使用,使用 MD5算法就可以為任何文件(不管其大小、格式、數量)產生一個獨一無二的“數字指紋”,借助這個“數字指紋”,通過檢查文件前后 MD5 值是否發生了改變,就可以知道源文件是否被改動。我們在下載軟件的時候經常會發現,軟件的下載頁面上除了會提供軟件的下載地址以外,還會給出一串長長的字符串。這串字符串其實就是該軟件的MD5 值,它的作用就在于下載該軟件后,對下載得到的文件用專門的軟件(如 Windows MD5 check 等)做一次 MD5 校驗,以確保我們獲得的文件與該站點提供的文件為同一文件。利用 MD5 算法來進行文件校驗的方案被大量應用到軟件下載站、論壇數據庫、系統文件安全等方面 。
垃圾郵件篩選
在電子郵件使用越來越普遍的情況下,可以利用 MD5 算法在郵件接收服務器上進行垃圾郵件的篩選,以減少此類郵件的干擾,具體思路如下:
建立一個郵件 MD5 值資料庫,分別儲存郵件的 MD5 值、允許出現的次數(假定為 3)和出現次數(初值為零)。
對每一封收到的郵件,將它的正文部分進行MD5 計算,得到 MD5 值,將這個值在資料庫中進行搜索。
如未發現相同的 MD5 值,說明此郵件是第一次收到,將此 MD5 值存入資料庫,并將出現次數置為1,轉到第五步。
如發現相同的 MD5 值,說明收到過同樣內容的郵件,將出現次數加 1,并與允許出現次數相比較,如小于允許出現次數,就轉到第五步。否則中止接收該郵件。結束。
接收該郵件。
責任編輯:YYX
-
算法
+關注
關注
23文章
4630瀏覽量
93365 -
md5
+關注
關注
0文章
29瀏覽量
20906
發布評論請先 登錄
相關推薦
評論