天天看點

java中使用MD5進行加密

java中使用MD5進行加密

在各種應用系統的開發中,經常需要存儲使用者資訊,很多地方都要存儲使用者密碼,而将使用者密碼直接存儲在伺服器上顯然是不安全的,本文簡要介紹工作中常用的 MD5加密算法,希望能抛磚引玉。           

(一)消息摘要簡介

一個消息摘要就是一個資料塊的數字指紋。即對一個任意長度的一個資料塊進行計算,産生一個唯一指印(對于SHA1是産生一個20位元組的二進制數組)。消息摘要是一種與消息認證碼結合使用以確定消息完整性的技術。主要使用單向散列函數算法,可用于檢驗消息的完整性,和通過散列密碼直接以文本形式儲存等,目前廣泛使用的算法有MD4、MD5、SHA-1。
           

消息摘要有兩個基本屬性:

  1. 兩個不同的封包難以生成相同的摘要
  2. 難以對指定的摘要生成一個封包,而可以由該封包反推算出該指定的摘要

    代表:美國國家标準技術研究所的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;

}