在各類應用系統中,若是須要設置帳戶,那麼就會涉及到儲存用戶帳戶信息的問題,爲了保證所儲存帳戶信息的安全,一般會採用MD5加密的方式來,進行儲存。首先,簡單得介紹一下,什麼是MD5加密。算法
MD5的全稱是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ronald L. Rivest開發出來,經MD二、MD3和MD4發展而來。是讓大容量信息在用數字簽名軟件簽署私人密匙前被"壓縮"成一種保密的格式(就是把一個任意長度的字節串變換成必定長的大整數)。無論是MD二、MD4仍是MD5,它們都須要得到一個隨機長度的信息併產生一個128位的信息摘要。雖然這些算法的結構或多或少有些類似,但MD2的設計與MD4和MD5徹底不一樣,那是由於MD2是爲8位機器作過設計優化的,而MD4和MD5倒是面向32位的電腦。這三個算法的描述和C語言源代碼在Internet RFCs 1321中有詳細的描述,這是一份最權威的文檔,由Ronald L. Rivest在1992年8月向IETF提交。數據庫
(一)消息摘要簡介
一個消息摘要就是一個數據塊的數字指紋。即對一個任意長度的一個數據塊進行計算,產生一個惟一指印(對於SHA1是產生一個20字節的二進制數組)。消息摘要是一種與消息認證碼結合使用以確保消息完整性的技術。主要使用單向散列函數算法,可用於檢驗消息的完整性,和經過散列密碼直接以文本形式保存等,目前普遍使用的算法有MD四、MD五、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;
}.net