詳細說明如下:
MD5是輸入不定長度訊息,輸出固定長度128-bits的演算法。經過程式流程,生成四個32位元資料,最後聯合起來成為壹個128-bits雜湊。基本方式為,求余、取余、調整長度、與連結變數進行回圈運算。得出結果。壹般128位元的MD5雜湊被表示為32位元十六進制數位。以下是壹個43位長ASCII字母列的MD5雜湊:
MD5("The quick brown fox jumps over the lazy dog") = 9e107d9d372bb6826bd81d3542a419d6
即使在原文中作壹個小變化(比如用c取代d)其雜湊也會發生巨大的變化:
MD5("The quick brown fox jumps over the lazy cog") = 1055d3e698d289f2af8663725127bd4b
而空文的雜湊為:
MD5("") = d41d8cd98f00b204e9800998ecf8427e
MD5的弱點:
MD5較老,雜湊長度通常為128位元,隨著電腦運算能力提高,找到「碰撞」是可能的。因此,在安全要求高的場合不使用MD5。
2004年,王小雲證明MD5數位簽名演算法可以產生碰撞。
2007年,Marc Stevens,Arjen K. Lenstra和Benne de Weger進壹步指出透過偽造軟體簽名,可重復性攻擊MD5演算法。研究者使用字首碰撞法(chosen-prefix collision),使程式前端包含惡意程式,利用後面的空間添上垃圾代碼湊出同樣的MD5 Hash值。
2007年,荷蘭埃因霍芬技術大學科學家成功把2個執行檔進行了MD5碰撞,使得這兩個執行結果不同的程式被計算出同壹個MD5。
2008年12月壹組科研人員透過MD5碰撞成功生成了偽造的SSL證書,這使得在https協議中伺服器可以偽造壹些根CA的簽名。