1 import java.security.MessageDigest; 2 3 public class MD5 { 4 5 public static String toMD5(String plainText) { 6 StringBuffer buf = new StringBuffer(""); 7 try { 8 // 生成實現指定摘要算法的 MessageDigest 對象。 9 MessageDigest md = MessageDigest.getInstance("MD5"); 10 // 使用指定的字節數組更新摘要。 11 md.update(plainText.getBytes()); 12 // 通過執行諸如填充之類的最終操作完成哈希計算。 13 byte b[] = md.digest(); 14 // 生成具體的md5密碼到buf數組(32位小寫) 15 int i; 16 17 for (int offset = 0; offset < b.length; offset++) { 18 i = b[offset]; 19 if (i < 0){ 20 i += 256; 21 } 22 if (i < 16){ 23 buf.append("0"); 24 }else{ 25 buf.append(Integer.toHexString(i)); 26 } 27 } 28 } catch (Exception e) { 29 e.printStackTrace(); 30 } 31 return buf.toString(); 32 } 33 34 public static byte[] toMD5byte(byte[] plainText) { 35 StringBuffer buf = new StringBuffer(""); 36 try { 37 // 生成實現指定摘要算法的 MessageDigest 對象。 38 MessageDigest md = MessageDigest.getInstance("MD5"); 39 // 使用指定的字節數組更新摘要。 40 md.update(plainText); 41 // 通過執行諸如填充之類的最終操作完成哈希計算。 42 byte b[] = md.digest(); 43 // 生成具體的md5密碼到buf數組 44 int i; 45 46 for (int offset = 0; offset < b.length; offset++) { 47 i = b[offset]; 48 if (i < 0) 49 i += 256; 50 if (i < 16) 51 buf.append("0"); 52 buf.append(Integer.toHexString(i)); 53 } 54 } catch (Exception e) { 55 e.printStackTrace(); 56 } 57 return buf.toString().getBytes(); 58 } 59 60 /** 61 * 解決php與javaMD5加密不同 獲取MD5加密后的字符串 62 * 63 * @param str 64 * 明文 65 * @return 加密后的字符串 66 * @throws Exception 67 */ 68 public static String getMD5(String str) throws Exception { 69 /** 創建MD5加密對象 */ 70 MessageDigest md5 = MessageDigest.getInstance("MD5"); 71 /** 進行加密 */ 72 md5.update(str.getBytes("GBK")); 73 /** 獲取加密后的字節數組 */ 74 byte[] md5Bytes = md5.digest(); 75 String res = ""; 76 for (int i = 0; i < md5Bytes.length; i++) { 77 int temp = md5Bytes[i] & 0xFF; 78 if (temp <= 0XF) { // 轉化成十六進制不夠兩位,前面加零 79 res += "0"; 80 } 81 res += Integer.toHexString(temp); 82 } 83 return res; 84 } 85 }