当前位置:   article > 正文

密码加密技术—BCrypt

bcrypt

一 什么是BCrypt

BCrypt是一种跨平台的文件加密工具,使用的是布鲁斯·施内尔在1993年发布的 Blowfish 加密算法。它是一种可生成随机盐值的单向Hash加密算法,Hash值中包含了上一步生成的盐值(22个字符)的不可逆加密算法。同一种明文,每次被加密后的密文都不一样,并且不可反向破解生成明文,破解难度非常大。

BCrypt加密后的密文结构如下图所示:

其中密文结构为:$是分割符, 2y是BCrypt加密版本号,10是cost的值,紧随其后的前22位是盐值(salt),最后的字符串就是密码的密文了。

二 BCrypt能干什么

BCrypt也是一种单向Hash加密算法,因此它不可被反向破解生成明文。由于计算中使用了随机盐值,并且在密文中包含了salt值,默认情况下每次生成的密文都是不同的。随机密文带来的好处是:避免了如果两个人或多个人的密码相同,密码加密后保存到数据库会得到相同的结果,以防破解一个就可以知道其他人的密码。

三 怎么使用BCrypt

1.pom 文件引入坐标:
  1. <!--密码加密和校验工具包-->
  2. <dependency>
  3. <groupId>org.springframework.security</groupId>
  4. <artifactId>spring-security-crypto</artifactId>
  5. </dependency>
2.配置密码加密匹配bean:
  1. @Configuration
  2. public class CommonConfig {
  3. /**
  4. * 密码加密器
  5. * BCryptPasswordEncoder方法采用SHA-256对密码进行加密
  6. * @return
  7. */
  8. @Bean
  9. public PasswordEncoder passwordEncoder(){
  10. return new BCryptPasswordEncoder();
  11. }
  12. }
3.密码加密测试:
  1. @SpringBootTest
  2. public class TestAll {
  3. @Autowired
  4. private PasswordEncoder passwordEncoder;
  5. @Test
  6. public void testPwd(){
  7. String pwd="1234";
  8. //加密 $2a$10$WAWV.QEykot8sHQi6FqqDOAnevkluOZJqZJ5YPxSnVVWqvuhx88Ha
  9. String encode = passwordEncoder.encode(pwd);
  10. System.out.println(encode);
  11. /*
  12. matches()匹配明文密码和加密后密码是否匹配,如果匹配,返回true,否则false
  13. just test
  14. */
  15. boolean flag = passwordEncoder.matches(pwd,"$2a$10$WAWV.QEykot8sHQi6FqqDOAnevkluOZJqZJ5YPxSnVVWqvuhx88Ha");
  16. System.out.println(flag);
  17. }
  18. }
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号