Spring Security 密码加密器 Pbkdf2PasswordEncoder 、 BCryptPasswordEncoder

开始

Spring Security 中含有两种经常被使用的密码加密器:Pbkdf2PasswordEncoder 、 BCryptPasswordEncoder

 

加密器工作形式:

传入原本密码,通过 encode() 方法获得加密后的字符串,字符串的生成与时间或者 hash 有关。所以,即使需要加密的密码相同,每次生成的字符串也不同,但是通过相同密码生成的字符串即使不同,也都可以通过加密器的 matches() 方法与原本密码匹配成功,通过校验

 

推荐使用

推荐使用 Pbkdf2PasswordEncoder 加密器,该加密器可以在创建时可以传入一个字符串阴钥,从而获得一个只属于你的加密器,即使数据库中密码的加密字符串被盗取,如果没有阴钥,则永远无法获得原密码

而对于 BCryptPasswordEncoder ,被盗取加密字符串后,如果用户使用了简单密码,则可以通过彩虹表获取原密码

 

SpringBoot测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class ConfigTest {

    // 注入配置的阴钥
    @Value("${system.user.password.secret}")
    private String secret;

    @Test
    public void testPasswordEncoder(){
        Pbkdf2PasswordEncoder pbkdf2PasswordEncoder = new Pbkdf2PasswordEncoder(secret);
        BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();

        String pbk1 = pbkdf2PasswordEncoder.encode("123456");
        String pbk2 = pbkdf2PasswordEncoder.encode("123456");

        String bcr1 = bCryptPasswordEncoder.encode("123456");
        String bcr2 = bCryptPasswordEncoder.encode("123456");

        System.out.println("pbk1: " + pbk1);
        System.out.println("pbk2: " + pbk2);
        System.out.println("pbk1 password:" + pbkdf2PasswordEncoder.matches("123456",pbk1));
        System.out.println("pbk2 password:" + pbkdf2PasswordEncoder.matches("123456",pbk2));

        System.out.println("---------------------");

        System.out.println("bcr1: " + bcr1);
        System.out.println("bcr2: " + bcr2);
        System.out.println("bcr1 password:" + bCryptPasswordEncoder.matches("123456",bcr1));
        System.out.println("bcr2 password:" + bCryptPasswordEncoder.matches("123456",bcr2));
    }
}

 

测试结果

 

可见加密字符串的不同并不会影响与原密码的匹配

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值