1.什么是MD5
MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。举个例子,你将一段话写在一个叫 readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现(两个MD5值不相同)。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。
2.Java中实现MD5
/**
* MD5加密方式(1)
* @param message
* @return
* @throws NoSuchAlgorithmException
* @throws UnsupportedEncodingException
*/
public static String md5Encode(String message) throws NoSuchAlgorithmException, UnsupportedEncodingException {
//得到一个信息的摘要器
MessageDigest digest = MessageDigest.getInstance("MD5");
byte [] result = digest.digest(message.getBytes("UTF-8"));
StringBuffer buffer = new StringBuffer();
//把每一个byte 做一个与运算 0xff
for(byte b:result) {
int number = b&0xff;
String str = Integer.toHexString(number);
if(str.length()==1) {
buffer.append("0");
}
buffer.append(str);
}
//标准的MD5加密后的结果
return buffer.toString().toUpperCase();
}
/**
* 普通的MD5加密方式(2)
* @param message
* @return
* @throws UnsupportedEncodingException
* @throws NoSuchAlgorithmException
*/
public static String publicMd5Encode(String message) throws UnsupportedEncodingException, NoSuchAlgorithmException {
char [] haxDigests = {'0','1','2','3','4','5','6','7','8','9','A',
'B','C','D','E','F'};
byte [] result = message.getBytes("UTF-8");
//获得MD5摘要算法的 MessageDigest对象
MessageDigest md5Digest = MessageDigest.getInstance("MD5");
//使用指定的字节更新摘要
md5Digest.update(result);
//获得密文
byte [] md = md5Digest.digest();
int j = md.length;
char [] str = new char[j*2];
int k = 0;
for(int i=0;i<j;i++) {
byte byte0 = md[i];
str[k++] = haxDigests[byte0>>4&0xf];
str[k++] = haxDigests[byte0&0xf];
}
return new String(str);
}
public static void main(String[] args) {
String Md5="";
String pMd5 = "";
try {
Md5 = md5Encode("上海");
pMd5 = publicMd5Encode("上海");
} catch (Exception e) {
e.printStackTrace();
System.out.println("加密数据失败");
}
System.out.println("方式1:"+Md5);//E94E8BD35FC8144F38FD1EBC1F81AB36
System.out.println("方式2:"+pMd5);//E94E8BD35FC8144F38FD1EBC1F81AB36
}
注意:message.getBytes("UTF-8"),将字符串变为字节数组的时候,需要设置一个编码格式,如果不设置的很可能导致生成的MD5加密结果与其他人生成的加密结果不一致