java中使用MD5進行加密
在各種應用系統的開發中,經常需要儲存使用者資訊,很多地方都要儲存使用者密碼,而將使用者密碼直接儲存在伺服器上顯然是不安全的,本文簡要介紹工作中常用的 MD5密碼編譯演算法,希望能拋磚引玉。
(一)訊息摘要簡介
一個訊息摘要就是一個資料區塊的數位指紋。即對一個任意長度的一個資料區塊進行計算,產生一個唯一指印(對於SHA1是產生一個20位元組的位元組)。訊息摘要是一種與訊息認證碼結合使用以確保訊息完整性的技術。主要使用單向散列函數演算法,可用於檢驗訊息的完整性,和通過散列密碼直接以文本形式儲存等,目前廣泛使用的演算法有MD4、MD5、SHA-1。
訊息摘要有兩個基本屬性:
- 兩個不同的報文難以產生相同的摘要
- 難以對指定的摘要產生一個報文,而可以由該報文反推算出該指定的摘要
代表:美國國家標準技術研究所的SHA1和麻省理工學院Ronald Rivest提出的MD5
(二)對字串進行加密 /** *//**利用MD5進行加密
* @param str 待加密的字串
* @return 加密後的字串
* @throws NoSuchAlgorithmException 沒有這種產生訊息摘要的演算法
* @throws UnsupportedEncodingException
*/
public String EncoderByMd5(String str) throws NoSuchAlgorithmException, UnsupportedEncodingException...{
//確定計算方法
MessageDigest md5=MessageDigest.getInstance("MD5");
BASE64Encoder base64en = new BASE64Encoder();
//加密後的字串
String newstr=base64en.encode(md5.digest(str.getBytes("utf-8")));
return newstr;
}
調用函數:
String str="0123456789"
System.out.println(EncoderByMd5(str));
輸出:eB5eJF1ptWaXm4bijSPyxw==
(三)驗證密碼是否正確
因為MD5是基於訊息摘要原理的,訊息摘要的基本特徵就是很難根據摘要推算出訊息報文,因此要驗證密碼是否正確,就必須對輸入密碼(訊息報文)重新計算其摘要,和資料庫中儲存的摘要進行對比(即資料庫中儲存的其實為使用者密碼的摘要),若兩個摘要相同,則說明密碼正確,不同,則說明密碼錯誤。
/** *//**判斷使用者密碼是否正確
* @param newpasswd 使用者輸入的密碼
* @param oldpasswd 資料庫中儲存的密碼--使用者密碼的摘要
* @return
* @throws NoSuchAlgorithmException
* @throws UnsupportedEncodingException
*/
public boolean checkpassword(String newpasswd,String oldpasswd) throws NoSuchAlgorithmException, UnsupportedEncodingException...{
if(EncoderByMd5(newpasswd).equals(oldpasswd))
return true;
else
return false;
}
參考資料
java上密碼編譯演算法的實現用例
java加密和數位簽章編程快速入門