算法分析
- MD5算法是輸入長度小于
2^64
比特的消息,輸出為128比特的消息摘要。 - 輸入消息以512比特的分組為單位處理溃卡。
-
具體過程如下:
- 附加填充位:保證消息長度
L=448(mod512)
然后將原始消息長度以64比特附在填充結(jié)果后面。從而使消息長度恰好為512比特的整數(shù)倍。 - 初始化鏈接變量:使用4個32位的寄存器A参滴,B,C锻弓,D砾赔,最開始存放4個固定的32位的整數(shù)參數(shù),即初始鏈接變量青灼,這些參數(shù)用于第一輪的迭代暴心。
- 分組處理(迭代壓縮): 由4輪組成,512比特按32比特分為16組杂拨,參與每輪16步函數(shù)運算专普。每步的輸入是4個32比特的鏈接變量和一個32比特的消息子分組。凈果輪共64步后弹沽,得到4個寄存器的值分別與輸入鏈接變量進(jìn)行模加檀夹,即的此次分組處理的輸出鏈接變量筋粗。
-
步函數(shù)的具體過程為:
算法實現(xiàn)
# 直接使用Python中的hashlib模塊,并將加密結(jié)果以16進(jìn)制形式顯示
import hashlib
# 生成md5數(shù)字指紋击胜。
s = b'abc' # 定義字節(jié)型字符串
md = hashlib.md5() # 導(dǎo)入md5算法
md.update(s) # 把值傳給md5算法
print('消息摘要:', md.hexdigest())
print('長度: ', len(md.hexdigest())*4)
生成消息摘要
當(dāng)消息s = “abc”
時亏狰,生成的消息摘要為:
安全性分析
- MD5算法中,輸出的每一位都是輸入的每一位的函數(shù)偶摔,邏輯函數(shù)F暇唾、G、H辰斋、I的復(fù)雜迭代使得輸出對輸入的依賴非常小策州。
- 對單輪的MD5算法,利用差分分析宫仗,可以在合理時間內(nèi)找出碰撞的兩條消息够挂。到2004年,便只需1小時就可找出MD5的碰撞藕夫。
- MD5算法抗密碼分析的能力較弱孽糖,生日攻擊所需代價是試驗2^64個消息。