Md5加密
Md5消息摘要
以下是实现md5加密
package com.eminen.util; import java.security.MessageDigest; public class Md5Util { public static String str2Md5(String str) throws Exception { MessageDigest md = null; md = MessageDigest.getInstance("MD5"); // 把字符串转byte数组进行消息摘要计算。得到一个byte数组 md.reset(); md.update(str.getBytes()); byte[] byteArr = md.digest(); // 或者简单用 // byteArr = md.digest(str.getBytes()); // 二进制 0-1----》转16进制 0-F char[] hexArr = encodeHex(byteArr); // 把字符数组编程字符串 String finalStr = new String(hexArr); System.out.println("16位大写:" + finalStr.substring(8, 24)); System.out.println("32位大写:" + finalStr); return finalStr; } // 主要代码:byte数组转为16进制字符数组 private static char[] encodeHex(byte[] byteArr) { int len = byteArr.length; // len = 16(10进制) = 10000 左移1位 100000 =32(10进制) char[] out = new char[len << 1]; for (int i = 0, j = 0; i < len; i++) { // 一个byte有8bit=1111,1111,每4个bit就是0-F.所以一个byte就是两个16进制 // 获取高4位就要 把低四位的移走,就要把这8bit往右边移动4位,再与0x0f运算,得到16进制高1位 // 获取低4位就直接与0x0f = 0000,1111进行与运算后,高位与0运算后都是0.低位与1运算后,有0为0。都1才1。得到16进制低1位 // 比如 24的8bit = 00011000 = 0001,1000 = 1,8 int hi = (byteArr[i] >> 4) & 0x0f; int lo = byteArr[i] & 0x0f; // 再把10进制转为16进制.forDigit返回的是int,再转为char // 'a'=97,b=98..... ('a'-10)=87+(》=10的)97以上的就是字符a开始算了 out[j++] = Character.forDigit(hi, 16); out[j++] = Character.forDigit(lo, 16); } return out; } public static void main(String[] args) throws Exception { String str = "ab"; Md5Util.str2Md5(str); } }
参考资料:
1.http://my.oschina.net/u/2519530/blog/536372