java中字符串 MD5密碼的加密與驗證
MD5即Message-Digest Algorithm 5(信息-摘要算法 5),用於確保信息傳輸完整一致。是計算機廣泛使用的雜湊算法之一(又譯摘要算法、哈希算法),主流編程語言普遍已有MD5實現。將數據(如漢字)運算爲另一固定長度值是雜湊算法的基礎原理,MD5的前身有MD2、MD3和MD4。
本實例介紹用MD5進行加密和驗證,將輸入字符串通過MD5加密成另一個字符串,而且根據新的字符串無法獲得原字符串,但可以在不知道原始密碼的情況下進行密碼驗證。
關鍵技術:
*通過java.security.MessageDigest的靜態方法getInstance創建具有指定算法名稱的信息摘要,參數爲算法名,傳入“MD5”則表示將使用MD5算法。
*MessageDigest的digest實例方法使用指定的字節數組對摘要進行最後更新,然後完成摘要計算,返回存放哈希值結果的季節數組,這個數組就是MD5加密產品。
*將加密後的字節數組轉換成十六進制的字符竄,形成最終的密碼。
*當輸入字符串經過MD5加密後,得到的字符串與密碼一樣,則認爲密碼驗證通過。
實例演示:
private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5",
"6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
/**
* 轉換字節數組爲16進制字串
*
* @param b
* 字節數組
* @return 16進制字串
*/
public static String byteArrayToHexString(byte[] b) {
StringBuffer resultSb = new StringBuffer();
for (int i = 0; i < b.length; i++) {
resultSb.append(byteToHexString(b[i]));
}
return resultSb.toString();
}
private static String byteToHexString(byte b) {
int n = b;
if (n < 0)
n = 256 + n;
int d1 = n / 16;
int d2 = n % 16;
return hexDigits[d1] + hexDigits[d2];
}
public static String MD5Encode(String origin) {
String resultString = null;
try {
resultString = new String(origin);
MessageDigest md = MessageDigest.getInstance("MD5");
resultString = byteArrayToHexString(md.digest(resultString
.getBytes()));
} catch (Exception ex) {
}
return resultString;
}
public static boolean isValidate(String input,String output){
boolean status = false;
if(MD5Util.MD5Encode(input).equals(output)){
status = true;
}else{
status = false;
}
return status;
}
public static void main(String[] args) {
System.out.println(MD5Encode("123"));
boolean b = MD5Util.isValidate("123", "21232f297a57a5a743894a0e4a801fc3");
System.out.println(b);
}
}