祖传代码-JAVA做md5

这篇文章是shitMountain这个tag的开端,如你所见,祖传代码的tag是屎山。这是为了警示我不要把自己写的贼烂的代码到处paste,只是做一个收集整理,不要学了就忘掉。

代码部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5 {
public static String encrypt(String plain){
try {
MessageDigest md= MessageDigest.getInstance("MD5");
md.update(plain.getBytes(),0,plain.length());
return new BigInteger(1,md.digest()).toString(16);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}
}

解释

代码说明

这里用的包主要就是java.security中的messageDigest,从中获取一个MD5的实例。最后得到一个md5的biginteger。

用处

这个代码常常用在希望对用户的密码做一个单向加密的情况。
显然,在数据库或者任何地方保存用户的明文密码是不合适的,更进一步,如果没有用https,直接传输密码也是不对的。
所以后端在保存密码的时候做一个md5的hash是最简单的解决方法。值得一提,这个方法并不能很好的解决数据泄露的问题,最简单的,相同的密码的最后hash还是相同的,所以彩虹表能很简单的获得使用简单密码的用户的密码明文。所以使用的时候加上一个盐还是挺好的,比如把用户的id或者用户名也一起拼接来做hash。