首页 > Java > 高级篇 > MD5加密、Base64加密解密
2014
08-28

MD5加密、Base64加密解密

MD5加密、Base64加密解密17

Message Digest algorithm 5,中文名为信息摘要算法第五版,常用于网站密码加密、软件正版验证等等。Apache上的开源软件大都提供MD5码。

1、MessageDigest类

java.security.MessageDigest类提供信息摘要算法的功能,如MD5或SHA算法。信息摘要是安全的单向哈希函数,它接受任意大小的数据,并输出固定长度的哈希值。

MessageDigest类常用方法如下:

  • getInstance(String name):返回实现指定摘要算法的MessageDigest对象。
  • byte[] digest(byte[] input):返回输入byte[]的信息摘要

通过MessageDigest.digest方法生成的信息摘要是一串二进制码,在任何码表中都没有对应的字符,因此不能直接输出摘要,此时可借助Base64编码进行加密后输出。

2、Base64加密原理(☆)

Base64编码可将任何二进制串转换成可见字符,转换原理是:将二进制串中的6位转8位输出,高位补0。因此Base64转化后的每个字节的表示范围为:0000 0000 ~ 0011 1111,对应64个字符,见下表:

MD5加密、Base64加密解密637

下面的代码演示了Java中MD5加密的过程:

public class MD5 {
	public static void main(String[] args) throws Exception {
		String sBefore = "jieyu";
		//实现指定摘要算法的MessageDigest对象
		MessageDigest md = MessageDigest.getInstance("md5");
		//返回的摘要在任何码表中都没有对应的字符
		byte b[] = md.digest(sBefore.getBytes());

		//把二进制串转换成可见字符:Base64
		BASE64Encoder base64 = new BASE64Encoder();
		String sAfter = base64.encode(b);
		System.out.println(sBefore+"经过MD5加密后的字符串:"+sAfter);
	}
}

3、SecurityUtil工具类

在实际的开发中经常会用到MD5加密、Base64加密解密,编写一个SecuritiyUtil类封装这些功能。

public class SecurityUtil {
	public static String md5(String s) {
		try {
			MessageDigest md = MessageDigest.getInstance("md5");
			byte b[] = md.digest(s.getBytes());

			// 把二进制串转换成可见字符:Base64
			BASE64Encoder base64 = new BASE64Encoder();
			return base64.encode(b);
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	public static String base64Encode(String s) {
		BASE64Encoder base64 = new BASE64Encoder();
		return base64.encode(s.getBytes());
	}

	public static String base64Decode(String s) {
		BASE64Decoder base64 = new BASE64Decoder();
		try {
			return new String(base64.decodeBuffer(s));
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
}

留下一个回复

你的email不会被公开。