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個。