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算法的一些基础使用,希望可以帮助到大家!