前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >BCrypt--密码加密和匹对

BCrypt--密码加密和匹对

作者头像
名字是乱打的
发布2022-05-13 10:26:35
1K0
发布2022-05-13 10:26:35
举报
文章被收录于专栏:软件工程

背景

任何应用考虑到安全,绝不能明文的方式保存密码。密码应该通过哈希算法进行加密。 有很多标准的算法比如SHA或者MD5,结合salt(盐)是一个不错的选择。 Spring Security 提供了BCryptPasswordEncoder类,实现Spring的PasswordEncoder接口使用BCrypt强哈希方法来加密密码。

BCrypt

BCrypt每次加密后的密码,我管理员自己看数据库都没有办法获得,因为它的加密是不可逆的,而且每次加密后密码都是随机的非常安全

我们使用过程通常需要导入spring security来提供这个加盐算法

代码语言:javascript
复制
<dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-security</artifactId>
      </dependency>

另外spring security默认提供一个拦截器会拦截我们的请求,而我们使用只是利用加盐算法的话那么需要修改,我们可以用如下方法做一个配置类改变默认的拦截

代码语言:javascript
复制
package com.tensquare.user.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

/**
 * 安全配置类
 */
@Configuration  /*让系统知道这是一个配置类*/
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter{
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        //authorizeRequests所有security全注解配置实现的开端,表示开始说明需要的权限。
        //需要的权限分两部分,第一部分是拦截的路径,第二部分访问该路径需要的权限。
        //antMlatchers表示拦截什么路径,permitA1任何权限都可以访问,直接放行所有。
        //anyRequest()任何的请求,authenticated认证后才能访问
        //.and().csrf().disable();固定写法,表示使csrf拦截失效。
        http
                .authorizeRequests()
                .antMatchers("/**").permitAll()
                .anyRequest().authenticated()
                .and().csrf().disable();
    }
}

这样当我们使用时候只需要注入这个加盐算法就可以使用了

代码语言:javascript
复制
@Autowired
    private BCryptPasswordEncoder bCryptPasswordEncoder;

BCryptPasswordEncoder 提供了两个方法,分别用来加密和匹对

  • encode()用于密码加密,我们把需要加密的密文放在BCryptPasswordEncoder的encode方法中作为参数即可实现严密,如下我们在注册用户时候添加密码可以先加密
代码语言:javascript
复制
user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
  • bCryptPasswordEncoder.matches( )可以用来匹配 BCcrypt采用的加盐和hash算法无法通过 matches(CharSequence rawPassword, String encodedPassword) 方法中前一个参数为前端传来的值(例如123),后一个为数据库中需要对比的值(已加密存入数据库的密码)

当我们使用密码加密的方式去注册和登录的时候

1.我们需要在注册时候向数据库添加密码前service层离用BCrypt去加密存库 2.同样我们在做登录时候,需要先利用用户名或者手机号等唯一标识用户的数据先去查库得到整个pojp实例bean然后用BCrypt去校验前端的密码和数据存的密码是否匹配`

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
    • BCrypt
      • BCryptPasswordEncoder 提供了两个方法,分别用来加密和匹对
        • 当我们使用密码加密的方式去注册和登录的时候
        相关产品与服务
        数据库
        云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档