加密工具類之MD5

MD5算法原理:
	MD5以512位分組來處理輸入的信息,且每一分組又被劃分爲16個32位子分組,經過了一系列的處理後,
	算法的輸出由四個32位分組組成,將這四個32位分組級聯後將生成一個128位散列值
MD5加密算法功能:
	1.輸入任意長度的信息,經過處理,輸出爲128位的信息(數字指紋);
    2.不同的輸入得到的不同的結果(唯一性);
    3.根據128位的輸出結果基本不可能反推出輸入的信息(不可逆)

MD5加密方法一:

import java.security.*;

public class MD5{
	//定義 String 數組,存儲16進制的基本字符
	private final static String[] hexDigits ={"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c","d", "e", "f"};
	//將指定byte數組轉換成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();
	}
	//將byte字符轉換成16進制字符串
	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];
	}
	//獲取MD5密文
	public static String compile(String origin){
		String resultString = null;
		try{
		  resultString = new String(origin);
		  MessageDigest md = MessageDigest.getInstance("MD5");
		//md.digest()該函數返回值爲存放哈希值結果的byte數組 
		  resultString = byteArrayToHexString(md.digest(resultString.getBytes()));
		}catch (Exception ex){
		  ex.printStackTrace();
		}
		return resultString;
	}
}

加密方法二:


	/**
	 * Description:將字符串進行MD5加密
	 * 
	 * @param inStr
	 *            需加密的字符串
	 * @return
	 */
		public static String string2MD5(String inStr) {
		// 創建一個 MessageDigest 對象(爲應用程序提供信息摘要算法)
		MessageDigest md5 = null;
		try {
			// 返回一個 MD5 算法實例
			md5 = MessageDigest.getInstance("MD5");
		} catch (Exception e) {
			return "";
		}
		// 將需要加密的字符串數組化(char是unicode字符)
		char[] charArray = inStr.toCharArray();
		// 將char數組轉化成byte數組
		byte[] byteArray = new byte[charArray.length];
		// char字符轉換成byte字符
		for (int i = NUM_ZERO; i < charArray.length; i++) {
			byteArray[i] = (byte) charArray[i];
		}
		// 對指定數組進行更新,完成摘要計算
		byte[] md5Bytes = md5.digest(byteArray);
		StringBuffer hexValue = new StringBuffer();
		String temp = "";
		for (int i = NUM_ZERO; i < md5Bytes.length; i++) {
			// 對數組元素進行二進制運算
			int val = ((int) md5Bytes[i]) & 0XFF;
			//返回16進制的字符串
			temp = Integer.toHexString(val);
			temp = (1 == temp.length()) ? (STRING_ZERO + temp) : temp;
			hexValue.append(temp);
		}
		return hexValue.toString().toUpperCase();
	}


import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import org.springframework.util.StringUtils;

加密方法三:

public class MD5Util{

	/**
	 * md5加密
	 * 
	 * @param str
	 * @return
	 */
	public static String md5(String str){
		try{
			if (StringUtils.isEmpty(str)){
				str = "";
			}
			MessageDigest md = MessageDigest.getInstance("MD5");
			md.update(str.getBytes());
			byte[] byteDigest = md.digest();
			int i;
			StringBuffer buf = new StringBuffer("");
			for (int offset = 0; offset < byteDigest.length; offset++){
				i = byteDigest[offset];
				if (i < 0)
					i += 256;
				if (i < 16)
					buf.append("0");
				buf.append(Integer.toHexString(i));
			}
			// 32位加密
			return buf.toString();
			// 16位的加密
			// return buf.toString().substring(8, 24);
		}catch (NoSuchAlgorithmException e){
			e.printStackTrace();
			return null;
		}
	}

}







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章