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();
}
}
@Test
public void test() {
System.out.println(MD5sUtils.encryptByMD5for32("123456")+"------"+MD5sUtils.encryptByMD5for16("123456"));
System.out.println(MD5sUtils.encodeBase64ByMD5("123456")+"----------"+MD5sUtils.decryptBASE64ByMD5("4QrcOUm6Wau+VuBX8g+IPg=="));
}