MD5演算法
看雪資料發表於2015-11-15
MD5演算法
在一些初始化處理後,MD5以512位分組來處理輸入文字,每一分組又劃分為16個32位子分組。演算法的輸出由四個32位分組組成,將它們級聯形成一個128位雜湊值。首先填充訊息使其長度恰好為一個比512位的倍數僅小64位的數。填充方法是附一個1在訊息後面,後接所要求的多個0,然後在其後附上64位的訊息長度(填充前)。這兩步的作用是使訊息長度恰好是512位的整數倍(演算法的其餘部分要求如此),同時確保不同的訊息在填充後不相同。
四個32位變數初始化為:
A=0x01234567
B=0x89abcdef
C=0xfedcba98
D=0x76543210
它們稱為連結變數(chaining variable)
接著進行演算法的主迴圈,迴圈的次數是訊息中512位訊息分組的數目。
將上面四個變數複製到別外的變數中:A到a,B到b,C到c,D到d。
主迴圈有四輪(MD4只有三輪),每輪很相擬。第一輪進行16次操作。每次操作對a,b,c和d中的其中三個作一次非線性函式運算,然後將所得結果加上第四個變數,文字的一個子分組和一個常數。再將所得結果向右環移一個不定的數,並加上a,b,c或d中之一。最後用該結果取代a,b,c或d中之一。
以一下是每次操作中用到的四個非線性函式(每輪一個)。
F(X,Y,Z)=(X&Y)|((~X)&Z)
G(X,Y,Z)=(X&Z)|(Y&(~Z))
H(X,Y,Z)=X^Y^Z
I(X,Y,Z)=Y^(X|(~Z))
(&是與,|是或,~是非,^是異或)
這些函式是這樣設計的:如果X、Y和Z的對應位是獨立和均勻的,那麼結果的每一位也應是獨立和均勻的。
函式F是按逐位方式操作:如果X,那麼Y,否則Z。函式H是逐位奇偶運算子。
設Mj表示訊息的第j個子分組(從0到15),<<<s表示迴圈左移s位,則四種操作為:
FF(a,b,c,d,Mj,s,ti)表示a=b+((a+(F(b,c,d)+Mj+ti)<<<s)
GG(a,b,c,d,Mj,s,ti)表示a=b+((a+(G(b,c,d)+Mj+ti)<<<s)
HH(a,b,c,d,Mj,s,ti)表示a=b+((a+(H(b,c,d)+Mj+ti)<<<s)
II(a,b,c,d,Mj,s,ti)表示a=b+((a+(I(b,c,d)+Mj+ti)<<<s)
這四輪(64步)是:
第一輪
FF(a,b,c,d,M0,7,0xd76aa478)
FF(d,a,b,c,M1,12,0xe8c7b756)
FF(c,d,a,b,M2,17,0x242070db)
FF(b,c,d,a,M3,22,0xc1bdceee)
FF(a,b,c,d,M4,7,0xf57c0faf)
FF(d,a,b,c,M5,12,0x4787c62a)
FF(c,d,a,b,M6,17,0xa8304613)
FF(b,c,d,a,M7,22,0xfd469501)
FF(a,b,c,d,M8,7,0x698098d8)
FF(d,a,b,c,M9,12,0x8b44f7af)
FF(c,d,a,b,M10,17,0xffff5bb1)
FF(b,c,d,a,M11,22,0x895cd7be)
FF(a,b,c,d,M12,7,0x6b901122)
FF(d,a,b,c,M13,12,0xfd987193)
FF(c,d,a,b,M14,17,0xa679438e)
FF(b,c,d,a,M15,22,0x49b40821)
第二輪
GG(a,b,c,d,M1,5,0xf61e2562)
GG(d,a,b,c,M6,9,0xc040b340)
GG(c,d,a,b,M11,14,0x265e5a51)
GG(b,c,d,a,M0,20,0xe9b6c7aa)
GG(a,b,c,d,M5,5,0xd62f105d)
GG(d,a,b,c,M10,9,0x02441453)
GG(c,d,a,b,M15,14,0xd8a1e681)
GG(b,c,d,a,M4,20,0xe7d3fbc8)
GG(a,b,c,d,M9,5,0x21e1cde6)
GG(d,a,b,c,M14,9,0xc33707d6)
GG(c,d,a,b,M3,14,0xf4d50d87)
GG(b,c,d,a,M8,20,0x455a14ed)
GG(a,b,c,d,M13,5,0xa9e3e905)
GG(d,a,b,c,M2,9,0xfcefa3f8)
GG(c,d,a,b,M7,14,0x676f02d9)
GG(b,c,d,a,M12,20,0x8d2a4c8a)
第三輪
HH(a,b,c,d,M5,4,0xfffa3942)
HH(d,a,b,c,M8,11,0x8771f681)
HH(c,d,a,b,M11,16,0x6d9d6122)
HH(b,c,d,a,M14,23,0xfde5380c)
HH(a,b,c,d,M1,4,0xa4beea44)
HH(d,a,b,c,M4,11,0x4bdecfa9)
HH(c,d,a,b,M7,16,0xf6bb4b60)
HH(b,c,d,a,M10,23,0xbebfbc70)
HH(a,b,c,d,M13,4,0x289b7ec6)
HH(d,a,b,c,M0,11,0xeaa127fa)
HH(c,d,a,b,M3,16,0xd4ef3085)
HH(b,c,d,a,M6,23,0x04881d05)
HH(a,b,c,d,M9,4,0xd9d4d039)
HH(d,a,b,c,M12,11,0xe6db99e5)
HH(c,d,a,b,M15,16,0x1fa27cf8)
HH(b,c,d,a,M2,23,0xc4ac5665)
第四輪
II(a,b,c,d,M0,6,0xf4292244)
II(d,a,b,c,M7,10,0x432aff97)
II(c,d,a,b,M14,15,0xab9423a7)
II(b,c,d,a,M5,21,0xfc93a039)
II(a,b,c,d,M12,6,0x655b59c3)
II(d,a,b,c,M3,10,0x8f0ccc92)
II(c,d,a,b,M10,15,0xffeff47d)
II(b,c,d,a,M1,21,0x85845dd1)
II(a,b,c,d,M8,6,0x6fa87e4f)
II(d,a,b,c,M15,10,0xfe2ce6e0)
II(c,d,a,b,M6,15,0xa3014314)
II(b,c,d,a,M13,21,0x4e0811a1)
II(a,b,c,d,M4,6,0xf7537e82)
II(d,a,b,c,M11,10,0xbd3af235)
II(c,d,a,b,M2,15,0x2ad7d2bb)
II(b,c,d,a,M9,21,0xeb86d391)
常數ti可以如下選擇:
在第i步中,ti是4294967296*abs(sin(i))的整數部分,i的單位是弧度。
(2的32次方)
所有這些完成之後,將A,B,C,D分別加上a,b,c,d。然後用下一分組資料繼續執行演算法,最後的輸出是A,B,C和D的級聯。
MD5的安全性
MD5相對MD4所作的改進:
1.增加了第四輪.
2.每一步均有唯一的加法常數.
3.為減弱第二輪中函式G的對稱性從(X&Y)|(X&Z)|(Y&Z)變為(X&Z)|(Y&(~Z))
4.第一步加上了上一步的結果,這將引起更快的雪崩效應.
5.改變了第二輪和第三輪中訪問訊息子分組的次序,使其更不相似.
6.近似最佳化了每一輪中的迴圈左移位移量以實現更快的雪崩效應.各輪的位移量互不相同.
相關文章
- MD5加密演算法2024-09-14加密演算法
- MD5演算法詳解2021-06-28演算法
- MD5訊息摘要演算法2018-05-18演算法
- MD5雜湊加密演算法2024-06-17加密演算法
- MD5演算法的應用及原理2018-08-22演算法
- 詳解 MD5 資訊摘要演算法2021-07-13演算法
- 加密演算法原理分析(MD5、SHA-256)2019-05-24加密演算法
- MD5演算法:密碼學中的傳奇2024-03-15演算法密碼學
- MD5演算法16位與32位的區別2018-08-17演算法
- 深入理解MD5演算法:原理、應用與安全2024-04-11演算法
- 摘要與加密的區別(以MD5演算法為例)2019-03-04加密演算法
- 加密演算法比較:SHA1,SHA256,MD52018-08-07加密演算法
- JAVA中MD5加密(MD5工具類)2019-01-09Java加密
- 安全-md52020-10-09
- md5解密2021-05-25解密
- MD5加密2022-06-28加密
- MD5手機號線上解密 MD5解密2024-08-08解密
- MD5介紹2018-08-20
- MD5簽名2018-06-14
- md5繞過2024-04-27
- MD5的使用2024-10-22
- java MD5 加密2021-09-15Java加密
- 常見的校驗演算法crc(32),md5(128),sha1(160)2023-09-28演算法
- js計算md52024-04-02JS
- 字串函式 md5 ()2020-05-25字串函式
- Vue 前端md5加密2019-01-01Vue前端加密
- MD5碰撞試驗2024-10-30
- MD5的其他使用2018-03-20
- MD5加密工具類2024-07-30加密
- 常見安全演算法(MD5、SHA1、Base64等等)總結2018-03-09演算法
- Oracle中的MD5加密2018-10-21Oracle加密
- qt實現md5加密2018-11-14QT加密
- C# MD5 加密,解密2018-07-18C#加密解密
- MD5的簡單用法2019-07-22
- MD5碰撞的演化之路2020-08-19
- Oracle和MySQL md5加密2019-06-17OracleMySql加密
- [BJDCTF2020]Easy MD52024-11-20TF2
- MD5程式碼工具類2018-04-16
- 獲取md5加密值2024-07-24加密