MD5只是用于加密嗎?可聽過文件MD5?
百度百科
MD5信息摘要算法(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼散列函數(shù),可以產(chǎn)生出一個128位(16字節(jié))的散列值(hash value),用于確保信息傳輸完整一致。MD5由美國密碼學(xué)家羅納德·李維斯特(Ronald Linn Rivest)設(shè)計,于1992年公開,用以取代MD4算法。這套算法的程序在 RFC 1321 標準中被加以規(guī)范。

1996年后該算法被證實存在弱點,可以被加以破解,對于需要高度安全性的數(shù)據(jù),專家一般建議改用其他算法,如SHA-2。2004年,證實MD5算法無法防止碰撞(collision),因此不適用于安全性認證,如SSL公開密鑰認證或是數(shù)字簽名等用途。

從上面的介紹來說 MD5 人家只是個算法,只是多用于加密,但是人家還有個用處就是用于來校驗文件是否完整。為什么這么說呢?同一個文件(比如說一個文件你 copy 一份換了一個名字,并沒有修改) MD5 過后何獲取文件 MD5 校驗值結(jié)果是一樣的。這就是問什么你下載的時候都會跟一個 MD5 的值,他是讓你交驗一下文件是否完整。

其還有個作用,比如說用戶連續(xù)上傳文件,一般人的做法就是:我給這個文件生成 UUID 名稱,然后把 UUID 存在數(shù)據(jù)庫中,但是如果用戶連續(xù)不停的上傳同一個文件,打個比方,你的網(wǎng)站有 10w 人訪問,他們有 10% 的人把同一個文件上傳了兩份,一份文件是 1MB 這就多占了你 10000MB 空間。但是如果你設(shè)計一下用戶上傳的時候你先計算一下他的 MD5 的值然后去文件庫里查找,如果存在則只要把之前的路徑引用存放到你現(xiàn)在的庫里就可以了,速度提升了,而且空間也省了很多。

說了這么多,我們來實際用用吧,怎么獲取文件的 MD5 值。
引入maven
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.6.5</version>
</dependency>
hutool 不用我說了吧
測試代碼
public static void main(String[] args) {
MD5 md5 = MD5.create();
String s = md5.digestHex(new File("text.md"));
System.out.println(s);
}
是不是很簡單。學(xué)到了吧。
