importjava.security.MessageDigest;
/*
* 传入参数:一个字节数组传出参数:字节数组的 MD5结果字符串
*/
publicclassMD5 {
publicstaticString getMD5(String str) {
String s = null;
// 用来将字节转换成十六进制表示的字符
// char[] hexDigits = { '0', '1', '2', '3', '4', '5','6', '7', '8',
// '9', 'a', 'b', 'c', 'd', 'e', 'f' };
try{
MessageDigest md = MessageDigest.getInstance("MD5");
//MD5加密算法只是对字符数组而不是字符串进行加密计算,得到要加密的对象
md.update(str.getBytes());
//MD5 的计算结果是一个 128 位的长整数,用字节表示就是 16 个字节
//进行加密运算并返回字节数组
bytetmp[] = md.digest();
StringBuilder sb = newStringBuilder();
//字节数组转换成十六进制字符串,形成最终的密文
for (int i = 0; i < tmp.length; i++) {
intvalue = tmp[i] & 0xff;
if(value < 16) {
sb.append(0);
}
sb.append(Integer.toHexString(value));
//取字节中高 4 位的数字转换,>>>为逻辑右移,将符号位一起右移
// sb.append(hexDigits[value >>> 4 &0xf]);
//取字节中低 4 位的数字转换
// sb.append(hexDigits[value & 0xf]);
}
s = sb.toString();
} catch(Exception e) {
e.printStackTrace();
}
returns;
}
/**
* @paramargs
*/
publicstatic voidmain(String[] args) {
// byte[] name = { 'Z', 'h', 'o', 'u', 'S', 'h', 'e','n', 'g', 's',
// 'h', 'u', 'a', 'i' };
String name = "Zhou Shengshuai";
String md5name = null;
md5name = MD5.getMD5(name);
System.out.println(md5name);
}
}