天天看點

JAVA MessageDigest MD5 SHA

 MD5是常用的加密算法,也經常用于校驗資訊完整,如檔案的完整性。用術語講,MD5是一種消息摘要算法(Message Digest Algorithm)。另外還有一種常用的消息摘要算法SHA1。如果想了解這些的話,可以去百度百科:MD5、SHA1、消息摘要算法。

         Java已經實作了MD5、SHA1算法。利用java.security.MessageDigest類就可以擷取字元串和檔案的MD5以及SHA1結果。

1.字元串的MD5(下面的代碼有詳細注釋)

下面這個函數用于将位元組數組換成成16進制的字元串

從上面代碼可以看出,使用MessageDigest對字元串進行MD5算法的步驟是,先将字元串轉換成位元組數組,在進行MD5算法,最後傳回的也是一個位元組數組,要我們自己轉成32位的字元串。

2.檔案MD5

對檔案進行MD5也可以像字元串MD5一樣的,首先要把檔案轉成位元組數組,後面和字元串MD5完全一樣。

但是如果是一個特别大的檔案,一下子把一個檔案的數組全部讀到記憶體中,那麼估計記憶體也吃不消。

對于大檔案,可以使用DigestInputStream。

測試檔案MD5的main方法

最一般的使用者,對使用者名和密碼進行MD5

我們知道,程式設計中資料的傳輸,儲存,為了考慮安全性的問題,需要将資料進行加密.我們拿資料庫做例子.如果一個使用者注冊系統的資料庫,沒有對使用者的資訊進行儲存,如,我去頁面注冊,輸入"Vicky","123456".注冊.web伺服器未對資料進行加密而直接寫入資料庫,那麼資料庫中的使用者資訊,便是一個直接可用的資料!一旦伺服器伺服器被黑~那麼使用者的資訊将毫無保留的展現在黑客面前...為了解決這個弊端,現在大多數都會将資訊進行MD5加密.如"Vicky"與"123456"加密後,會生成16位或者32位字元串.而黑客即便獲得這些資料也無法使用...

列印的是:[B@107077e,這是因為輸出的是byte[](messageDigest.digest()得到的是個二進制byte數組,有可能某些byte是不可列印的字元。)...我們可以使用Base64來處理byte[]。

MessageDigest不僅僅隻為我們提供了"MD5"加密,還提供了"SHA-1"等四種不同的加密方式。

建立的方法隻為: MessageDigest messageDigest = MessageDigest.getInstance("SHA-1");

MD5與SHA-1的差別為:MD5是16位,SHA是20位(這是兩種封包摘要的算法)

當然我們可以編寫函數,處理二進制轉hex字元串.