import java.security.MessageDigest;import org.apache.commons.codec.binary.Base64;public class MD5sUtils { /** * MD5 加密 返回MD5码32位字符串 * @param str * @return * @throws Exception */ public static String encryptByMD5for32(String str) throws Exception{ return bytesToHex(encryptMD5(str)); } /** * MD加密后,在用BASE64 加密返回字符串 * @param str * @return * @throws Exception */ public static String encodeBase64ByMD5(String str) throws Exception{ return Base64.encodeBase64String(encryptMD5(str)); } /** * BASE64 加密的字符串解密出来,转成16进制,返回就是MD5的16进制字符串 * @param key * @return * @throws Exception */ public static String decryptBASE64ByMD5(String key) throws Exception { return bytesToHex(Base64.decodeBase64(key)); } /** * MD5 加密 返回 16位字符串 * @param str * @return * @throws Exception */ public static String encryptByMD5for16(String str) throws Exception{ return bytesToHex(encryptMD5(str)).substring(8,24); } /** * MD5 * @param str * @return * @throws Exception */ private static byte[] encryptMD5(String str) throws Exception { MessageDigest md = MessageDigest.getInstance("MD5"); return md.digest(str.getBytes("UTF-8")); } /** * MD5 byte转换成16进制返回 * @param b * @return */ private static String bytesToHex(byte[] b) { StringBuffer buf = new StringBuffer(); int i; for (int offset = 0; offset < b.length; offset++) { i = b[offset]; if (i < 0) { i += 256; } if (i < 16) { buf.append("0"); } // 将整型 十进制 i 转换为16位,用十六进制参数表示的无符号整数值的字符串表示形式。 buf.append(Integer.toHexString(i)); } return buf.toString(); } }
@Testpublic void test() { System.out.println(MD5sUtils.encryptByMD5for32("123456")+"------"+MD5sUtils.encryptByMD5for16("123456")); System.out.println(MD5sUtils.encodeBase64ByMD5("123456")+"----------"+MD5sUtils.decryptBASE64ByMD5("4QrcOUm6Wau+VuBX8g+IPg=="));}