MD5摘要算法

        MD5即Message-Digest Algorithm 5(信息-摘要算法5),用於確保信息傳輸完整一致。是計算機廣泛使用的雜湊算法之一(又譯摘要算法、哈希算法),主流編程語言普遍已有MD5實現。將數據(如漢字)運算爲另一固定長度值,是雜湊算法的基礎原理,MD5的前身有MD2、MD3和MD4。

 MD5算法具有以下特點:

1、壓縮性:任意長度的數據,算出的MD5值長度都是固定的。
2、容易計算:從原數據計算出MD5值很容易。
3、抗修改性:對原數據進行任何改動,哪怕只修改1個字節,所得到的MD5值都有很大區別。
4、強抗碰撞:已知原數據和其MD5值,想找到一個具有相同MD5值的數據(即僞造數據)是非常困難的。
MD5的作用是讓大容量信息在用數字簽名軟件簽署私人密鑰前被"壓縮"成一種保密的格式(就是把一個任意長度的字節串變換成一定長的十六進制數字串)。除了MD5以外,其中比較有名的還有sha-1、RIPEMD以及Haval等。

點擊閱讀更多原理介紹

JAVA中的摘要算法簡單示例:

 

package com.zhuifeng.util;
import java.security.MessageDigest;  
/**
 * @author guoxk
 *
 * @version 創建時間 2016年1月7日 下午1:47:06
 *
 * 類描述:MD5加密工具類
 *
 */
public class MD5Util{  
	/**
	 * @author guoxk
	 *
	 * 方法描述:MD5加密方法
	 * @param str 明文
	 * @param charSet 字符編碼
	 * @return 密文
	 */
    public  static String MD5(String str,String charSet) {
    	MessageDigest messageDigest = null;  
	try {  
		messageDigest = MessageDigest.getInstance("MD5");  
		messageDigest.reset(); 
		if(charSet==null){
			messageDigest.update(str.getBytes());
		}else{
			messageDigest.update(str.getBytes(charSet));  
		}			
	} catch (Exception e) {  
		e.printStackTrace();
	} 
	byte[] byteArray = messageDigest.digest();  
	StringBuffer md5StrBuff = new StringBuffer();  
	for (int i = 0; i < byteArray.length; i++) {              
		if (Integer.toHexString(0xFF & byteArray[i]).length() == 1)  
			md5StrBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i]));  
		else  
			md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));  
	}  
	return md5StrBuff.toString();  

    }
    /**
     * @author guoxk
     *
     * 方法描述:MD5加密方法 --- UTF-8編碼
     * @param s 明文
     * @return 密文
     */
    public  static String MD5(String s) {
        char hexDigits[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};       
        try {
            byte[] btInput = s.getBytes("utf-8");
            // 獲得MD5摘要算法的 MessageDigest 對象
            MessageDigest mdInst = MessageDigest.getInstance("MD5");
            // 使用指定的字節更新摘要
            mdInst.update(btInput);
            // 獲得密文
            byte[] md = mdInst.digest();
            // 把密文轉換成十六進制的字符串形式
            int j = md.length;
            char str[] = new char[j * 2];
            int k = 0;
            for (int i = 0; i < j; i++) {
                byte byte0 = md[i];
                str[k++] = hexDigits[byte0 >>> 4 & 0xf];
                str[k++] = hexDigits[byte0 & 0xf];
            }
            return new String(str);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    public static void main(String[] args) {
	String password = "ming wen mi ma";
	System.out.println("原明文:" + password);
	String pw = MD5(password);//默認utf-8編碼加密,32位大寫,
	System.out.println("32位大寫UTF-8加密後:" + pw);//C0389AC882DFCCA5592628F139F7A975
	String pw2 = MD5(password,"GBK");//自定義編碼加密,32位小寫
	System.out.println("32位小寫自定義編碼加密後:" + pw2);//c0389ac882dfcca5592628f139f7a975
    }
} 

 


 

發佈了34 篇原創文章 · 獲贊 15 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章