MD5加密

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=="));
}

你可能感兴趣的:(MD5)