介绍与特点

Md5

  • Message Digest algorithm 5,信息摘要算法
  • 压缩性:任意长度的数据,算出的Md5值的长度都是固定的;
  • 容易计算:从原数据计算出Md5值很容易;
  • 抗修改性:对源数据进行任何改动,哪怕只修改一个字节,所得到的MD5值很容易。
  • 强抗碰撞:想找到两个不同的数据,使他们具有相同的Md5值,是非常困难的。

加盐

  • 通过生成随机数与Md5生成字符串进行组合
  • 数据库同时存储Md5值玉salt值,验证正确性使用salt进行Md5即可。

使用 推荐 BCryptPasswordEncoder

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Test
public void md5Test() {


//org.apache.commons.codec.digest
// 由于抗修改性 所以可以暴力 破解 彩虹表 所以MD5不能进行直接加密
DigestUtils.md5Hex("123456");
// 盐值加密:随机值 格式 $1$+8位字符
//比如加上当前系统时间 为了后续验证则需要将系统时间也保存 验证时再次加密对比即可
Md5Crypt.md5Crypt("123456".getBytes(),"$1$88888888");

// 密码编码器 springsecurity 不用我们再存储盐值,匹配会自动解析出盐值
BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
//编码 每次得到的不同
String encode = bCryptPasswordEncoder.encode("123456");
//验证匹配
bCryptPasswordEncoder.matches("123456",encode);

}

作者声明

1
如有问题,欢迎指正!