【问题标题】:How can I pre-generate a BCrypt hashed password for my Spring Boot application?如何为我的 Spring Boot 应用程序预先生成 BCrypt 哈希密码?
【发布时间】:2020-02-24 16:58:40
【问题描述】:

我有一个 Spring Boot 应用程序(代码 here)和一个使用 BCryptPasswordEncoder 的 security configuration

@Bean
public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
}

我想预先生成几个密码来初始化我的数据库,以便在开发人员机器上进行测试或登录。 (不适用于生产。)我的数据库是 PostgreSQL,架构基于 Spring Security 默认架构,有一个 users 表和一个 authorities 表。我的 SQL 语句如下所示:

insert into users (username, password, enabled) values ('joe','$2y$12$XodbOuISPCPQijlY8MIRUepDeURhxDe09/4VQU0Cno5zkTEKjZouO',true);

我不太了解 BCrypt 哈希算法的工作原理,但我使用看起来合法的免费在线 BCrypt hash generator 生成了这个密码哈希(用于密码“测试”)。不过,我无法登录到我的 Spring Boot 应用程序。日志中的错误是“凭据错误”。什么给了?

PS:这是this other question的后续。

【问题讨论】:

    标签: spring-boot bcrypt password-hash


    【解决方案1】:

    您可以使用在线 BCrypt 生成器,但问题是在线生成器可能会从您的 Spring Segurity 编码器生成不同的正则表达式。

    例如,在线生成器可以使用正则表达式“$2y”生成 BCrypt,而您的 Spring Boot 编码器可以使用“$2a”正则表达式生成。如果发生这种情况,您总是会收到错误的凭证。

    我强烈建议您使用 Spring Boot BCrypt Enconder 生成密码。

    @SpringBootApplication
    public class QuartzJdbcJobStoreBciApplication extends SpringBootServletInitializer{
    
    public static void main(String[] args {
        SpringApplication.run(QuartzJdbcJobStoreBciApplication.class, args);
        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
        String password [] = {"Password1", "Password2", "Password3"};
        for(int i = 0; i < password.length; i++)
            System.out.println(passwordEncoder.encode(password[i]));
    
        }
    }
    

    【讨论】:

      【解决方案2】:

      问题原来是哈希中的前缀$2y。这应该代表 BCrypt 算法的一个版本,但是,according to Wikipedia,前缀不是标准的。需要明确的是,在线生成器没有使用非标准的算法,只是一个非标准的标签

      顺便说一下,散列的下一部分,$12,表示散列的 轮数,即使它与 Spring 默认值(10 轮)不同,它也不会'不会导致问题。

      解决方案是简单地将y 更改为a$2a 是 BCrypt 哈希的标准前缀。你不需要找到不同的 BCrypt 生成器或任何东西,只需编辑字符串。

      这行得通:

      insert into users (username, password, enabled) values ('joe','$2a$12$XodbOuISPCPQijlY8MIRUepDeURhxDe09/4VQU0Cno5zkTEKjZouO',true);
      

      【讨论】:

        猜你喜欢
        • 2017-11-15
        • 2014-05-26
        • 1970-01-01
        • 2012-01-08
        • 2012-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-13
        相关资源
        最近更新 更多