天天看點

我的Java開發學習之旅------>工具類:Java擷取字元串和檔案進行MD5值

我的Java開發學習之旅------>工具類:Java擷取字元串和檔案進行MD5值

ps:這幾天本人用百度雲盤秒傳了幾部大片到雲盤上,幾個G的檔案瞬秒竟然顯示“上傳成功”!這真讓我目瞪口呆,要是這樣的話,那得多快的網速,這絕對是不可能的,也許這僅是個假象。百度了一下才發現所謂的“秒傳”是常見的“忽略式”上傳方式,就是您上傳了一個檔案名為111.exe,MD5為一個數,有一個網友以前也上傳一個叫222.exe,MD5和您上傳的檔案MD5碼一模一樣,是以這個檔案上傳到伺服器上的時間就很短了,這是因為别人上傳過這個檔案,您上傳這個檔案,伺服器上有這個檔案了,是以隻需要把這個檔案複制一份到您的網盤上就可以了。

秒傳的原理詳細解釋  

上傳到網盤的每個檔案,伺服器都會校驗MD5碼。如果這個您上傳的檔案MD5碼與已經存在于伺服器裡的檔案的MD5碼相同的話,網盤伺服器将會判斷成為重複檔案,隻需要複制副本儲存在網盤上即可,無需重新儲存,因為有過目前這個檔案,于是很快完成上傳任務,并在有人需要下載下傳的時候将原有的該檔案的下載下傳位址放出。這樣實作了伺服器的高效運作。

怎樣不秒傳?  

把你要上傳的東西壓縮成RAR,東西上傳,伺服器會先做MD5校驗,如果伺服器上有一樣的東西,它就直接給你個新位址,其實你下載下傳的都是伺服器上的同一個檔案,想要不秒傳,其實隻要讓MD5改變,就是對檔案本身做一下修改(改名字不行),例如一個文本檔案,你多加幾個字,MD5就變了,就不會秒傳了。  但是有些檔案我們不好改變,也不想改變,那其實隻要壓縮一下,MD5就變了,而下載下傳的人也能獲得最原始的資料,不過就是加壓要花費一點時間。

下面來學習學習MD5的相關知識,MD5 即Message-Digest Algorithm 5(資訊-摘要算法5 ),是一種用于産生數字簽名的單項散列算 法,在1991年由MIT Laboratory for Computer Science(MIT計算機科學實驗室)和RSA Data Security Inc(RSA資料安全公司)的Ronald L. Rivest教授開發出來,經由MD2、MD3和MD4發展而來。MD5算法的使用不需要支付任何版權費用。它的作用是讓大容量資訊在用數字簽名軟體簽私人密匙前被"壓縮"成一種保密的格式(将一個任意長度的“位元組串”通過一個不可逆的字元串變換算法變換成一個128bit的大整數

,換句話說就是,即使你看到源程式和算法描述,也無法将一個MD5的值變換回原始的字元串,從數學原理上說,是因為原始的字元串有無窮多個,這有點象不存在反函數的數學函數。)

在 Java 中,java.security.MessageDigest 中已經定義了 MD5 的計算,是以我們隻需要簡單地調用即可得到 MD5 的128 位整數。然後将此 128 位(即16 個位元組)轉換成 16 進制表示即可。

Java已經實作了MD5、SHA1算法。利用java.security.MessageDigest類就可以擷取字元串和檔案的MD5以及SHA1結果下面是一個工具類,可以擷取字元串和檔案進行MD5值。

下面是一個測試類,用于測試上面的MD5工具類是否有用

測試結果如下:

參考連結:

http://blog.csdn.net/xiao__gui/article/details/8148203

http://baike.baidu.co/link?url=1IssoIidKtoOPvWnNHn4HaKsjYy7s4q85qO7uwrhxWA0mXxoiY3-84mss_wdGWpi

====================================================================================

  作者:歐陽鵬  歡迎轉載,與人分享是進步的源泉!

===================================================================================