
1.MD5
MD5是MD4的改進版,用512位分組來操作輸入的信息,產生128位散列值。
MD5算法的計算過程主要包括以下步驟。
(1)預填充
第一步,填充信息使它的位長對512求余的結果是448,即信息的位長被擴展至Nx512+448或N×64+56個字節(N是正整數)。填充的方法是在信息後填充一個1和多個0,直至達到上面的條件。然後,再附加一個64位二進制代表的填充之前信息的長度。顺利获得這兩步的處理,讓消息的長度剛好是512位的整數倍。
(2)主循環
主循環的次數是信息中512位分組的數目。MD5中需要4個32位的連結變量: A=0x01234567,B=0x89abcdef,C=0xfedcba98,D=0x76543210。
每個主循環有4輪(MD4僅僅有3輪)每輪循環均非常近似。在主循環開始前,先將4個連結變量複製到另外4個變量中:A到a,B到b,C到c,D到d。第一輪進行16次操作。每次操作對a、b、c和d中的3個做一次非線性函數運算,然後把得出的結果加第4個變量、512位分組數據和一個常數。再把得到的結果向右環移一個不固定的數,並加上a、b、c、d中之一。最終用此結果代替a、b、c或d中之一。
每個主循環完成以後,將A、B、C、D分別加上a、b、c、d,然後用下一個512位分組數據繼續進行主循環運算,直到全部分組都完成主循環運算。
(3)輸出處理
把最後一個主循環生成的A、B、C、D這四個32位值進行級聯,生成一個128位的摘要值。
2. SHA1
SHA1是以512位分組來操作輸入信息的,得到160位散列值。
SHA1算法的計算過程與MD5類似,主要包括以下步驟。
(1)預填充
填充方法與MD5全部相同。
(2)主循環
主循環的次數是信息中512位分組的數目。SHA1中需要5個32位的連結變量:A=0x67452301,B=0xefcdab89,C=0x98badcfe,D=0x10325476,E=0xc3d2e1f0。
每個主循環有4輪,每輪20次操作(MD5有4輪,每輪16次操作)。在主循環開始前,先將5個連結變量複製到另外5個變量中:A到a,B到b,C到c,D到d,E到e。每次操作對a、b、c、d、e中的3個進行一次非線性運算,然後進行與MD5中類似的移位運算和加運算。
每個主循環完成以後,將A、B、C、D、E分別加上a、b、c、d、e,然後用下一個512位分組數據繼續進行主循環運算,直至全部分組都完成主循環運算。
(3)輸出處理
把最後一個主循環生成的A、B、C、D、E這5個32位值進行級聯,生成一個160位的摘要值。
3.SM3
SM3算法是主要滿足電子認證服務系統等應用需求的摘要算法。
針對長度為l(l<264)比特的消息m,SM3算法顺利获得填充與疊代壓縮,得到雜湊值,其長度為256位。其中填充過程為:假設消息m的長度為l位。第一时间將位“1”添加到消息的末尾,再添加k個“0”,k是滿足l+1+k=448 mod 512的最小的非負整數;然後再加入一個64位的比特串,該比特串是長度l的二進制表示;填充後的消息m’的比特長度是512的倍數。
