package com.uas.eis.utils; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5Util { // 全局数组 private final static String[] strDigits = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" }; /** * MD5加密 * @param message * @return */ public static String getEncryption(String message){ String result = ""; if(message != null){ try { MessageDigest md = MessageDigest.getInstance("MD5"); //指定加密方式 //加密 byte[] bytes = md.digest(message.getBytes()); for(int i = 0; i < bytes.length; i++){ // 将整数转换成十六进制形式的字符串 这里与0xff进行与运算的原因是保证转换结果为32位 String str = Integer.toHexString(bytes[i] & 0xFF); if(str.length() == 1){ str += "F"; } result += str; } } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } } return result; } public static String encodeByMD5(String originString) { if (originString != null) { try { MessageDigest md = MessageDigest.getInstance("MD5"); byte[] results = md.digest(originString.getBytes()); String resultString = byteArrayToHexString(results); return resultString.toUpperCase(); } catch (Exception ex) { ex.printStackTrace(); } } return null; } public static String byteArrayToHexString(byte[] bArr) { StringBuffer sb = new StringBuffer(bArr.length); String sTmp; for (int i = 0; i < bArr.length; i++) { sTmp = Integer.toHexString(0xFF & bArr[i]); if (sTmp.length() < 2){ sb.append(0); } sb.append(sTmp.toUpperCase()); } return sb.toString(); } /** * hex字符串转byte数组 * @param inHex 待转换的Hex字符串 * @return 转换后的byte数组结果 */ public static byte[] hexToByteArray(String inHex){ int hexlen = inHex.length(); byte[] result; if (hexlen % 2 == 1){ //奇数 hexlen++; result = new byte[(hexlen/2)]; inHex="0"+inHex; }else { //偶数 result = new byte[(hexlen/2)]; } int j=0; for (int i = 0; i < hexlen; i+=2){ result[j]=(byte)Integer.parseInt(inHex.substring(i,i+2),16); j++; } return result; } public static String encrypt32(String strObj) { String resultString = null; try { resultString = new String(strObj); MessageDigest md = MessageDigest.getInstance("MD5"); // md.digest() 该函数返回值为存放哈希值结果的byte数组 resultString = byteToString(md.digest(strObj.getBytes())); } catch (NoSuchAlgorithmException ex) { ex.printStackTrace(); } return resultString; } public static String encrypt32Up(String strObj){ return encrypt32(strObj).toUpperCase(); } public static String encrypt16(String strObj){ return encrypt32(strObj).substring(8,24); } public static String encrypt16Up(String strObj){ return encrypt32Up(strObj).substring(8,24); } // 转换字节数组为16进制字串 private static String byteToString(byte[] bByte) { StringBuffer sBuffer = new StringBuffer(); for (int i = 0; i < bByte.length; i++) { sBuffer.append(byteToArrayString(bByte[i])); } return sBuffer.toString(); } // 返回形式为数字跟字符串 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]; } }