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