MD5——Message Digest Algorithm MD5(消息摘要算法)
MD5算法具有以下特点:
1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
代码实现
加盐——即在MD5基础上进一步加密,提高安全性,这里只是实现简易的加盐
public class MD5{
public static void main(String[] args) {
System.out.println(getMD5("a"));
}
public static String getMD5(String str){
String md5 = null;
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] buf = md.digest(str.getBytes());//生成Hash值字节数组
//看看生成的字节数组长什么样?
StringBuffer result = new StringBuffer();
for (byte b : buf){
result.append(b);
result.append(" ");
}
System.out.println(result.toString());
StringBuffer sb = new StringBuffer();
int num;
for (byte b : buf){
num = b;
//简易加盐,如果num为负,加上256,确保有两位,如果小于16(F=15),表示不足2位,则添0
if (num < 0)
num += 256;
if (num < 16)
sb.append(0);
sb.append(Integer.toHexString(num));//转化为16进制
}
md5 = sb.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return md5;
}
}
输出结果:
12 -63 117 -71 -64 -15 -74 -88 49 -61 -103 -30 105 119 38 97
0cc175b9c0f1b6a831c399e269772661