在各種應用系統的開發中經常需要存儲用戶信息很多地方都要存儲用戶密碼而將用戶密碼直接存儲在服務器上顯然是不安全的本文簡要介紹工作中常用的 MD加密算法希望能拋磚引玉
(一)消息摘要簡介
一個消息摘要就是一個數據塊的數字指紋即對一個任意長度的一個數據塊進行計算產生一個唯一指印(對於SHA是產生一個字節的二進制數組)消息摘要是一種與消息認證碼結合使用以確保消息完整性的技術主要使用單向散列函數算法可用於檢驗消息的完整性和通過散列密碼直接以文本形式保存等目前廣泛使用的算法有MDMDSHA
消息摘要有兩個基本屬性
兩個不同的報文難以生成相同的摘要難以對指定的摘要生成一個報文而可以由該報文反推算出該指定的摘要代表美國國家標准技術研究所的SHA和麻省理工學院Ronald Rivest提出的MD
(二)對字符串進行加密


/** *//**利用MD
進行加密

* @param str 待加密的字符串

* @return 加密後的字符串

* @throws NoSuchAlgorithmException 沒有這種產生消息摘要的算法

* @throws UnsupportedEncodingException

*/


public String EncoderByMd
(String str) throws NoSuchAlgorithmException
UnsupportedEncodingException
{

//確定計算方法

MessageDigest md
=MessageDigest
getInstance(
MD
);

BASE
Encoder base
en = new BASE
Encoder();

//加密後的字符串

String newstr=base
en
encode(md
digest(str
getBytes(
utf
)));

return newstr;

}
調用函數String str=
Systemoutprintln(EncoderByMd(str))
輸出eBeJFptWaXmbijSPyxw==
(三)驗證密碼是否正確
因為MD是基於消息摘要原理的消息摘要的基本特征就是很難根據摘要推算出消息報文因此要驗證密碼是否正確就必須對輸入密碼(消息報文)重新計算其摘要和數據庫中存儲的摘要進行對比(即數據庫中存儲的其實為用戶密碼的摘要)若兩個摘要相同則說明密碼正確不同則說明密碼錯誤


/** *//**判斷用戶密碼是否正確

* @param newpasswd 用戶輸入的密碼

* @param oldpasswd 數據庫中存儲的密碼--用戶密碼的摘要

* @return

* @throws NoSuchAlgorithmException

* @throws UnsupportedEncodingException

*/


public boolean checkpassword(String newpasswd
String oldpasswd) throws NoSuchAlgorithmException
UnsupportedEncodingException
{

if(EncoderByMd
(newpasswd)
equals(oldpasswd))

return true;

else

return false;

}
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26374.html