java中字符串 MD5密碼的加密與驗證

java中字符串 MD5密碼的加密與驗證

  MD5即Message-Digest Algorithm 5(信息-摘要算法 5),用於確保信息傳輸完整一致。是計算機廣泛使用的雜湊算法之一(又譯摘要算法、哈希算法),主流編程語言普遍已有MD5實現。

   將數據(如漢字)運算爲另一固定長度值是雜湊算法的基礎原理,MD5的前身有MD2、MD3MD4

        本實例介紹用MD5進行加密和驗證,將輸入字符串通過MD5加密成另一個字符串,而且根據新的字符串無法獲得原字符串,但可以在不知道原始密碼的情況下進行密碼驗證。

 

關鍵技術:

*通過java.security.MessageDigest的靜態方法getInstance創建具有指定算法名稱的信息摘要,參數爲算法名,傳入“MD5”則表示將使用MD5算法。

*MessageDigest的digest實例方法使用指定的字節數組對摘要進行最後更新,然後完成摘要計算,返回存放哈希值結果的季節數組,這個數組就是MD5加密產品。

*將加密後的字節數組轉換成十六進制的字符竄,形成最終的密碼。

*當輸入字符串經過MD5加密後,得到的字符串與密碼一樣,則認爲密碼驗證通過。

 

實例演示:

public class MD5Util {
    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);
        
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章