MD5算法描述
當我要寫一個MD5算法的程序時,發現中英文的語言描述都有一些不確切的地方,某些個細節講得不清楚,或者說很費解。最後不得不拿出C語言的源程序來調試,這對於理解算法是很不利的。於是就總結了一下我摸索到的一些要點。
1.來歷
MD5的全稱是message-digest algorithm 5(信息-摘要算法,在90年代初由mit laboratory for computer science和rsa data security inc的ronald l. rivest開發出來,經md2、md3和md4發展而來。 http://www.IEtf.org/rfc/rfc1321.txt ,是一份最權威的文檔,
由ronald l. rivest在1992年8月向IEft提交。
2.用途
MD5的作用是對一段信息(message)生成信息摘要(message-digest),該摘要對該信息具有唯一性,可以作為數字簽名。用於驗證文件的有效性(是否有丟失或損壞的數據),對用戶密碼的加密,在哈希函數中計算散列值。
3.特點
輸入一個任意長度的字節串,生成一個128位的整數。由於算法的某些不可逆特征,在加密應用上有較好的安全性。並且,MD5算法的使用不需要支付任何版權費用。
4.說明
唯一性和不可逆性都不是絕對的,從理論上分析是一種多對一的關系,但兩個不同的信息產生相同摘要的概率很小。不可逆是指從輸出反推輸入所需的運算量和計算時間太大,使用窮搜字典的方法又需要太多的存儲空間。
5.算法描述
算法輸入是一個字節串,每個字節是8個bit.算法的執行分為以下幾個步驟:
第一步,補位:
MD5算法先對輸入的數據進行補位,使得數據的長度(以byte為單位)對64求余的結果是56。即數據擴展至LEN=K*64+56個字節,K為整數。
補位方法:補一個1,然後補0至滿足上述要求。相當於補一個0x80的字節,再補值為0的字節。這一步裡總共補充的字節數為0~63個。