BCrypt算法的基础使用

BCrypt算法是一种基于哈希算法的算法,所以,这种算法也是不可逆的!

应用场景:用于存放密码,卡号等不可解密的数据信息

在开发实现中,通常,可以使用配置类中的@Bean方法来创建BCryptPasswordEncoder对象,此对象将是由Spring进行管理的,当需要使用时,自动装配即可,例如:

@Configuration
public class SecurityConfiguration {

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

}
@Service
public class AdminServiceImpl implements IAdminService {

    @Autowired
    private PasswordEncoder passwordEncoder;
    
}

下面我们来看看BCrypt的使用:

 如上我们编写了一个测试类,类中方法testEncode()和testMaches()分别实现了密码加密和密码匹配

当我们执行第一个方法testEncode()得到如下结果:

 我们在多执行几次,看看结果会有什么不同:

对此我们可以很清楚的看到,密码并未改变都是123456,而加密后的密文每一次的结果都不同的.

为什么会出现这种情况?

这是因为

通过BCrypt算法进行编码后的结果,长度固定为60字符。

使用同一个原文进行反复编码,每次得到的结果都是不同的,因为在编码过程中,BCrypt使用了随机的盐,并且,使用的盐也作为编码结果的一部分保存了下来。

BCrypt算法的加盐机制:

随机生成一个含有29个字符的字符串,并且会与密码一起合并进行最终的密文生成
每一次生成的盐的值都是不同的
且密码不可逆,是通过加密后和密文比较来确认


下面我们执行一下testMaches()方法看看生成的不同密文是否和原密码都是匹配的: 

 

 可以看出生成的不同密文最终的匹配结果都是true.

所以,以上就是BCrypt算法的一些基础使用,希望可以帮助到大家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

错把路灯看作月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值