詳情如下:
MD5是壹種算法,用於輸入不確定長度的消息,並輸出128位的固定長度。通過程序流,生成四個32位數據,最後組合成壹個128位的hash。基本方法是:求余數,取余數,調整長度,用鏈接變量進行循環運算。得到結果。通常,128位的MD5哈希表示為32位十六進制數字。以下是壹個43位長的ASCII字母列的MD5哈希:
MD5("快速的棕色狐貍跳過懶狗")= 9e 107 d9d 372 bb 6826 BD 81d 3542 a 419d 6
即使對原文做了很小的改動(比如用c代替d),哈希也會有很大的變化:
MD5("快速的棕色狐貍跳過懶惰的齒輪")= 1055 d3e 698d 289 F2 af 8663725127 bd4b
空文本的哈希是:
MD5(" " = d 41 D8 CD 98 f 00 b 204 e 9800998 ECF 8427 e
MD5的弱點:
MD5比較老,哈希長度通常是128位。隨著計算機計算能力的提高,找到“碰撞”是可能的。所以在安全性要求高的場合不使用MD5。
2004年,王小雲證明了MD5數字簽名算法可以產生沖突。
2007年,馬克·斯蒂文斯、阿爾金·k·倫斯特拉和本尼·德·韋格進壹步指出,MD5算法可以通過偽造軟件簽名被反復攻擊。研究人員使用choosed-prefix碰撞方法,使程序前端包含惡意程序,在後面的空間添加垃圾代碼,組成相同的MD5哈希值。
2007年,荷蘭英霍芬理工大學的科學家用MD5成功碰撞了兩個執行文件,使得這兩個執行結果不同的程序計算出相同的MD5。
2008年6月5438+2月,壹組研究人員通過MD5碰撞成功生成偽造的SSL證書,使得服務器能夠偽造https協議中某個根CA的簽名。