1 /**
2 * 加密类
3 */
4 public class MD5Util {
5 /**
6 * 进行MD5加密
7 */
8 public static String entryptByMD5(String originstr) {
9 String result = null;
10 char hexDigits[] = { // 用来将字节转换成 16 进制表示的字符
11 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
12 if (originstr != null) {
13 try {
14 // 返回实现指定摘要算法的 MessageDigest 对象
15 MessageDigest md = MessageDigest.getInstance("MD5");
16 // 使用utf-8编码将originstr字符串编码并保存到source字节数组
17 byte[] source = originstr.getBytes("utf-8");
18 // 使用指定的 byte 数组更新摘要
19 md.update(source);
20 // 通过执行诸如填充之类的最终操作完成哈希计算,结果是一个128位的长整数
21 byte[] tmp = md.digest();
22 // 用16进制数表示需要32位
23 char[] str = new char[32];
24 for (int i = 0, j = 0; i < 16; i++) {
25 // j表示转换结果中对应的字符位置
26 // 从第一个字节开始,对 MD5 的每一个字节
27 // 转换成 16 进制字符
28 byte b = tmp[i];
29 // 取字节中高 4 位的数字转换
30 // 无符号右移运算符>>> ,它总是在左边补0
31 // 0x代表它后面的是十六进制的数字. f转换成十进制就是15
32 str[j++] = hexDigits[b >>> 4 & 0xf];
33 // 取字节中低 4 位的数字转换
34 str[j++] = hexDigits[b & 0xf];
35 }
36 result = new String(str);// 结果转换成字符串用于返回
37 } catch (NoSuchAlgorithmException e) {
38 // 当请求特定的加密算法而它在该环境中不可用时抛出此异常
39 e.printStackTrace();
40 } catch (UnsupportedEncodingException e) {
41 // 不支持字符编码异常
42 e.printStackTrace();
43 }
44 }
45 return result;
46 }
47 }