@Test
public void contextLoads() {
// d4541250b586296fcce5dea4463ae17f
// 抗修改性:但是网上都有md5暴力破解程序。就是别人暴力破解然后将破解的结果存入数据库里面,所以就能解析出MD5的原文
String s = DigestUtils.md2Hex("123456");
System.out.println("s = " + s);
// MD5不能直接进行密码的加密存储,需要在原文的基础上加盐(随机字符)
String s2 = DigestUtils.md2Hex("123456" + System.currentTimeMillis());
System.out.println("s2 = " + s2);
String s1 = Md5Crypt.md5Crypt("12345".getBytes(),"$1$qqqqqqqq");
System.out.println("s1 = " + s1);
// 通过自定义随机字段来实现加盐操作,需要在数据库中存储这个用于对应的盐值,很麻烦。spring 提供了简便的操作
// 好处:我们不需要自己维护每个用户的盐值是什么,spring这个工具会随机生成,还能根据密文推断出原文是什么
// 这么看来,这样子也是不安全的仍然可以暴力破解,不过吧MD5的跟费劲,因为md5是一样的,而spring这个工具是每次加密的密文都不一样。
BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
// $2a$10$zsWQmE/oCHeL5zglk/okgu.oL/pfftIVAaDS73A606k6K.deqhZzq
// $2a$10$dtLuUZKZ8DI8AbE2C8QREeZfI8xjCXH7QcT3XakK1DlbANE9zq0Ym
String encode = bCryptPasswordEncoder.encode("12345");
System.out.println("encode = " + encode);
Boolean b = bCryptPasswordEncoder.matches("12345", "$2a$10$dtLuUZKZ8DI8AbE2C8QREeZfI8xjCXH7QcT3XakK1DlbANE9zq0Ym");
Boolean b2 = bCryptPasswordEncoder.matches("12345", "$2a$10$zsWQmE/oCHeL5zglk/okgu.oL/pfftIVAaDS73A606k6K.deqhZzq");
System.out.println("b = " + b);
System.out.println("b2 = " + b2);
}
最终选用spring 提供的BCryptPasswordEncoder类帮我们实现加盐的MD5加密,还能使用密文和原文匹配是否正确。