Java中的MD5資訊摘要演算法

2021-09-01 23:25:52 字數 1179 閱讀 1982

所謂md5,即"message-digest algorithm 5(資訊-摘要演算法)",它由md2、md3、md4發展而來的一種單向函式演算法(也就是hash演算法),它是國際著名的公鑰加密演算法標準rsa的第一設計者r.rivest於上個世紀90年代初開發出來的。md5的最大作用在於,將不同格式的大容量檔案資訊在用數字簽名軟體來簽署私人金鑰前"壓縮"成一種保密的格式,關鍵之處在於——這種"壓縮"是不可逆的。 

為了讓讀者朋友對md5的應用有個直觀的認識,筆者以乙個比方和乙個例項來簡要描述一下其工作過程: 

大家都知道,地球上任何人都有自己獨一無二的指紋,這常常成為公安機關鑑別罪犯身份最值得信賴的方法;與之類似,md5就可以為任何檔案(不管其大小、格式、數量)產生乙個同樣獨一無二的"數字指紋",如果任何人對檔案做了任何改動,其md5值也就是對應的"數字指紋"都會發生變化。 

筆者上面提到的例子只是md5的乙個基本應用,實際上md5還被用於加密解密技術上,如unix、各類bsd系統登入密碼(在md5誕生前採用的是des加密演算法,後因md5安全性更高,des被淘汰)、通訊資訊加密(如大家熟悉的即時通訊軟體myim)、數字簽名等諸多方面。 

md5將任意長度的「位元組串」變換成乙個128bit的大整數,並且它是乙個不可逆的字串變換演算法,換句話說就是,即使你看到源程式和演算法描述,也無法將乙個md5的值變換回原始的字串,從數學原理上說,是因為原始的字串有無窮多個,這有點象不存在反函式的數學函式。 

md5的典型應用是對一段message(位元組串)產生fingerprint(指紋),以防止被「篡改」。舉個例子,你將一段話寫在乙個叫 readme.txt檔案中,並對這個readme.txt產生乙個md5的值並記錄在案,然後你可以傳播這個檔案給別人,別人如果修改了檔案中的任何內容,你對這個檔案重新計算md5時就會發現(兩個md5值不相同)。如果再有乙個第三方的認證機構,用md5還可以防止檔案作者的「抵賴」,這就是所謂的數字簽名應用。 

md5還廣泛用於加密和解密技術上,在很多作業系統中,使用者的密碼是以md5值(或類似的其它演算法)的方式儲存的, 使用者login的時候,系統是把使用者輸入的密碼計算成md5值,然後再去和系統中儲存的md5值進行比較,而系統並不「知道」使用者的密碼是什麼。

public static string md5(string str) catch (nosuchalgorithmexception e) 

return pwd;

}

MD5摘要演算法實現

網上找到的實現md5函式 包括乙個標頭檔案md5.h和乙個原始檔md5.c,用下面的測試 test.c測試通過,各檔案依次如下 標頭檔案md5.h 1 ifndef md5 h 2 define md5 h 34 typedef struct 5md5 ctx 1011 12 define f x,...

java實現MD5演算法

public class md5 src class md5 static final byte padding private long state private long count private byte buffer public string digesthexstr private ...

MD5訊息摘要演算法的那些事

1.md5 message digest 訊息摘要演算法 1 md5演算法是一種雜湊 hash 演算法 摘要演算法,指紋演算法 不是一種加密演算法,任何長度的任意內容都可以用md5計算出雜湊值 2 無論字串還是檔案都可以計算md5值,無論字串長短,還是檔案大或者小,計算出來的md5值得位數相同 3 ...