数据库用户密码不能明文,因为一旦服务器被黑客攻破,黑客就可以拿到所有用户的密码,非常的危险。
所以我们会把密码进行加盐和MD5加密处理。
为什么要加盐?因为客户的密码可能过于简单,比如123456,像这种密码,即使使用MD5加密,也可能被彩虹表攻击。彩虹表是使用穷举法生成常见明文以及对应的MD5密文,然后使用数据库保存反向索引,即通过MD5密文查找出明文。常见破解网站:md5在线解密破解,md5解密加密 (cmd5.com)。通过加盐操作,让客户的密码变得复杂,从而防止彩虹表攻击。
加入依赖
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.15</version>
</dependency>
添加MD5Utils工具类
public class Md5Utils {
public static String md5Digest(String source) {
String md5Hex = DigestUtils.md5Hex(source);
return md5Hex;
}
public static String md5Digest(String source, Integer salt) {
char[] chars = source.toCharArray();
for (int i = 0; i < chars.length; i++) {
chars[i] = (char) (chars[i] + salt);
}
String str = new String(chars);
return Md5Utils.md5Digest(str);
}
}
编写测试
public class Md5UtilsTest extends TestCase {
public void testMd5Digest() {
String s1 = Md5Utils.md5Digest("123456");
System.out.println(s1);
String s = Md5Utils.md5Digest("123456", 123321);
System.out.println(s);
}
}
第二个使用了加盐,即使是破解网站也无法破解。