簡述md5算法的具體過程
MD5算法的具體過程如下
1、填充消息
我們需要將信息補充到512的倍數(shù)(也就是64字節(jié))。填充一個1再填充0,使得消息的長度對512取余為448.
舉例:比如原來的消息長度是64字節(jié),那么填充的長度就是448-64.也就是384字節(jié),使得長度為448字節(jié)。
2、 初始化MD緩沖區(qū)
MD5的嘻哈值是128位,我們按照32位一組,那么就可以分為4個組別,分別是A、B、C、D。經(jīng)過演練就可以得到,初始值可以自定義。
假如將MD緩沖區(qū)初始化為以下的值:
A = 0x67452301
B = 0xefcdab89
C = 0x98badcfe
D = 0x10325476
3、處理消息塊的結果
對于每一個消息塊(512位的)。都會執(zhí)行下面4步:
(1)將緩沖區(qū)的4個變量復制到臨時變量的abcd中。
(2)對于每一個512的消息,都會使用64位的函數(shù)F來處理(下面會講到),這個函數(shù)是用來對他們進行壓縮用的。
(3)將F的結果abcd變量累計相加,得到新的ABCD
(4)將ABCD賦值給緩沖區(qū)的abcd四個變量。
經(jīng)過一定的消息塊處理,最后緩沖區(qū)的四個變量就是MD5算法得出的結果。
關于壓縮函數(shù)F
MD5的核心就是一個循環(huán)運算算法,它由rounds 4輪一共64步組成,每一輪都由16個步驟。它們分別用到不同的非線性函數(shù)和加法常數(shù),其中在每一步都必須下面4個步驟:
(1)將消息塊分組按照允許民命為F0、F1....F15.
(2)復制緩沖區(qū)的4個變量到abcd當中。
(3)根據(jù)當前的輪數(shù)選擇不同的非線性函數(shù)F\G\I計算出T值
(4)將T和abcd當中的其中任意一個相加。你就會得到新的變量ABCD。并且更新到緩沖區(qū)。
具體實現(xiàn)如下:
i在0到15之間時:
T = (B & C) | ((~B) & D)
F = B ^ C ^ D
i在16到31之間時:
T = (D & B) | ((~D) & C)
F = (5 * i + 1) mod 16
i在32到47之間時:
T = B ^ C ^ D
F = (3 * i + 5) mod 16
i在48到63之間時:
T = C ^ (B | (~D))
F = (7 * i) mod 16
說明:符號“&”表示按照位邏輯和運算?!皘”代表按位邏輯或運算,“~”代表按位取反運算,MOD代表取余運算.
版權所屬:SO JSON在線解析
原文地址:http://zijieyoumin.cn/blog/401.html
轉(zhuǎn)載時必須以鏈接形式注明原始出處及本聲明。
如果本文對你有幫助,那么請你贊助我,讓我更有激情的寫下去,幫助更多的人。