MessageDigest實現MD5加密算法

MD5加密算法的實現原理

  • Java中MD5加密算法的實現:
public class MD5 {
	// 全局數組
	private final static String[] strDigit = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};

	public class MD5 {
	}

	// 返回形式爲數字和字符串
	private static String byteToArrayString(byte bByte) {
		int iRet = bByte;
		if (iRet < 0) {
			iRet += 256;
		}
		int iD1 = iRet / 16;
		int iD2 = iRet % 16;
		return strDigits[iD1] + strDigits[iD2];
	}	

	// 返回形式只爲數字
	private static String byteToNum(byte bByte) {
		int iRet = bByte;
		if (iRet < 0) {
			iRet += 256;
		}
		return String.valueOf(iRet);
	}

	// 將字節數組轉換成爲16進制的字符串
	private static String byteToString(byte[] bByte) {
		StringBuffer stringBuffer = new StringBuffer();
		for (int i; i < bByte.length; i++) {
			StringBuffer.append(byteToArrayString(bByte[i]));
		}
		return stringBuffer.toString();
	}

	// 獲取MD5值
	public static String GetMD5Code(String strObj) {
		String resultString = null;
		try {
			resultString = new String();
			MessageDigest md5 = MessageDigest.getInstance("MD5");
			// md5.digest() - 返回值爲存放Hash值結果的byte數組
			resultString = byteToString(md5.digest(strObj.getBytes()));
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
		return resultString;
	}
} 

字符串的MD5加密算法

  • 使用Java自帶的MessageDigest實現對文本的MD5加密算法:
/**
 * 將字符串轉換爲MD5
 */
 public class ParseMD5 {
 	public static String parseStrToMd5L32(String str) {
 		// 將字符串轉換爲32位小寫MD5 
 		String reStr = null;
 		try {
 			MessageDigest md5 = MessageDigest.getInstance("MD5");
 			byte[] bytes = md5.digest(str.getBytes());
 			StringBuffer stringBuffer = new StringBuffer();
 			for (byte b : bytes) {
 				int bt = b&0xff;
 				if (bt < 16) {
 					stringBuffer.append(0);
 				}
 				stringBuffer.append(Integer.toHexString(bt));
 			}
 			reStr = stringBuffer.toString();
 		} catch (NoSuchAlgorithmException e) {
 			e.printStackTrace();
 		}
 		return reStr;
 	}

	// 將字符串轉換爲32位大寫的MD5
	public static String parseStrToMd5U32(String str) {
		String reStr = parseStrToMd5L32(str);
		if (reStr != null) {
			reStr = reStr.toUpperCase();
		}
		return resStr;
	}

	// 將字符串轉換爲16位小寫的MD5
	public static String parseStrToMd5L16(String str) {
		String reStr = paseStrToMd5L32(str);
		if (reStr != null) {
			reStr = reStr.subString(8, 24);
		}
		return reStr;
	}

	// 將字符串轉換爲16位大寫的MD5
	public static String parseStrToMd5U16(String str) {
		String reStr = parseStrToMd5L32(str);
		if (reStr != null) {
			reStr = reStr.toUpperCase().subString(8, 24);
		}
		return reStr;
	}
 }

文本的MD5加密工具類

  • Java中提供了自帶的MessageDigest實現對文本的加密算法. 對文本進行加密的MD5加密工具類如下:
public class MD5Util {
	// 將文本轉換爲32位小寫的MD5
	public static String textToMd5L32(String plainText) {
		String result = null;
		// 判斷需要轉換的文本是否爲空
		if (StringUtils.isBlank(plainText)) {
			return null;
		}
		try {
			// 進行實例化和初始化
			MessageDigest md5 = MessageDigest.getInstance("MD5");
			// 得到一個操作系統默認的字節編碼格式的字節數組
			byte[] byteInput = plainText.getBytes();
			// 對得到的字節數組進行處理
			md5.update(byteInput);
			// 進行Hash計算並得到返回結果
			byte[] btResult = md5.digest();
			// 得到進行Hash計算後數據的長度
			StringBuffer stringBuffer = new StringBuffer();
			for (byte b : btResult) {
				int bt = b&0xff;
				if (bt < 16) {
					stringBuffer.append(0);
				}
				stringBuffer.append(Integer.toHexString(bt));
			}
			reStr = stringBuffer.toString();
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
		return reStr;
	}

	// 將文本轉換爲32位大寫的MD5
	public static String textToMd5U32(String plainText) {
		if (StringUtils.isBlank(plainText)) {
			return null;
		}
		String result = textToMd5L32(plainText);
		result = result.toUpperCase();
		return result;
	}	
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章