当前位置: 首页 > 知识库问答 >
问题:

BCryptPasswordEncoder-编码的密码不像BCrypt

陶腾
2023-03-14

我有一个springboot 2.0.1.mvc版本的应用程序,这是我的配置文件

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {


    @Autowired
    private Environment env;


    @Override
    protected void configure(HttpSecurity http) throws Exception {

        final List<String> activeProfiles = Arrays.asList(env.getActiveProfiles());
        if (activeProfiles.contains("dev")) {
            http.csrf().disable();
            http.headers().frameOptions().disable();
        }

        http
                .authorizeRequests()
                .antMatchers(publicMatchers()).permitAll()
                .and()
                .formLogin().loginPage("/login").defaultSuccessUrl("/elcordelaciutat/config")
                .failureUrl("/login?error").permitAll()
                .and()
                .logout().permitAll();
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {

         PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
         UserDetails userDetails = User.withUsername("elcor")
                  .password(encoder.encode("elcor"))
                  .roles("ADMIN")
                  .build();
         auth.inMemoryAuthentication().withUser(userDetails);

    }


    private String[] publicMatchers() {

         /** Public URLs. */
        final String[] PUBLIC_MATCHERS = {
                "/webjars/**",
                "/css/**",
                "/js/**",
                "/images/**",
                "/",
                "/about/**",
                "/contact/**",
                "/error/**/*",
                "/console/**"
        };

        return PUBLIC_MATCHERS;

    }

}

但当我登录到应用程序时,我在日志文件中看到了以下消息

2018-04-11 11:27  [http-nio-5678-exec-7] WARN  o.s.s.c.b.BCryptPasswordEncoder - Encoded password does not look like BCrypt

我不能登录...密码是正确的。我在将我的应用程序从springboot 1更新到springboot 2后出现了这个错误

共有1个答案

阳航
2023-03-14

spring安全介绍了与版本5的一些主要变化。其中之一是在哈希中包含用于散列密码的算法。这允许更容易的迁移。

密码的一般格式为:

{id}encodedPassword 

作为附带说明:如果您将密码存储在数据库中并设置了固定长度,这也可能导致您意外地截断了哈希的末尾,因为前面的id会增加哈希的长度。

我还将一个项目从spring boot 1/spring 4迁移到spring boot 2/spring 5,并从BCrypt迁移到PBKDF2。

我的密码编码器现在如下所示:

public PasswordEncoder passwordEncoder() {
    // This is the ID we use for encoding.
    String currentId = "pbkdf2.2018";

    // List of all encoders we support. Old ones still need to be here for rolling updates
    Map<String, PasswordEncoder> encoders = new HashMap<>();
    encoders.put("bcrypt", new BCryptPasswordEncoder());
    encoders.put(currentId, new Pbkdf2PasswordEncoder(PBKDF2_2018_SECRET, PBKDF2_2018_ITERATIONS, PBKDF2_2018_HASH_WIDTH));

    return new DelegatingPasswordEncoder(currentId, encoders);
}

它还需要更新数据库,并为所有当前哈希加前缀{bcrypt}(我以前专门使用bcrypt)

来源:spring博客

 类似资料:
  • 我正在使用OAuth2和JPA编写spring boot REST安全API。当访问访问令牌时,我会收到警告,因为编码密码看起来不像BCrypt。当我点击邮递员http://localhost:8080/oauth/token的URL时?grant_type=password&username=user&password=user i get 我已经定义了Bean和存储库。我已经使用了secret

  • 我正在使用spring boot,spring安全,OAuth2和JWT来验证我的应用程序,但我一直得到这个令人讨厌的错误,我不知道什么是错误的。我的类: : : 除: 我的实体模型类是: 实体: 实体: 我在数据库中的密码是正确加密的spring安全BCrypt,它的数据类型是varchar(255),大于60。

  • 我无法使用正确的详细信息登录,因为程序不断声明编码的密码看起来不像bcrypt。有人知道怎么解决这个吗?我正在使用JDBC身份验证。 我也有正确的数据库表,有足够的空间用于编码密码。我不确定哪里出了问题。 JSP表单: 安全配置: 登录控制器 我的数据库:这里

  • 我最近遵循了Spring boot安全中的身份验证和授权教程,我想我在谈到sql时迷路了。尽管它没有显示任何错误,即使我输入了正确的用户名和密码,它仍然显示错误的凭据。这是我的代码: UserDetailsServiceImpl.java WebUserMapper.java WebSecurityConfig.java 这是我的数据库: 它返回以下错误: 密码是123。我不知道为什么它不工作,即

  • 即使输入了正确的电子邮件和密码,同样的错误也会一次又一次地出现。 更多参考请参见我的回复-https://github.com/ajitlol404/smartcontactmanager/tree/master/smartcontactmanager 控制台错误