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