【问题标题】:BCrypt in Spring gives different hash then online toolsSpring 中的 BCrypt 提供了与在线工具不同的哈希值
【发布时间】:2019-12-05 23:33:51
【问题描述】:

我在 Spring 中使用 BCrypt,它给了我不同的哈希值,然后一些在线工具正在使用,例如 https://bcrypt-generator.com/

有什么想法吗?

我尝试在 Spring 中将强度设置为 12,并在 bcrypt-generator.com 上将轮数设置为 12,但没有成功。

    DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
    provider.setPasswordEncoder(new BCryptPasswordEncoder(12));
    provider.setUserDetailsService(bettingBotUserDetailsService);

对于原始密码 "admin" 我得到以下结果:

bcrypt-generator.com 12 轮:

$2y$12$15h6Idq/TwfcuJu6H1VXie/ao7P4AKlLgIrC5yxbwlEUdJjx9Sl5S

Spring(从调试模式捕获):

$2a$10$ED5wQChpxzagbvhlqEqD2.iIdIKv9ddvJcX0WKrQzSOckgc3RHFLW

【问题讨论】:

    标签: spring spring-boot bcrypt


    【解决方案1】:

    BCrypt 为相同的输入生成不同的盐Bcrypt Algorithm

    BCrypt 每次都返回不同的哈希值,因为它在哈希值中加入了不同的随机值。这被称为“盐”。它可以防止人们使用"rainbow table" 攻击您的哈希密码,这是一个预先生成的表格,将密码哈希值映射回他们的密码。加盐意味着密码不是只有一个哈希值,而是2^16

    我们可以用普通字符串检查哈希值如下

    Boolean isMatch = passwordEncoder().matches(currentPassword,dbPassword);
    
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
    

    【讨论】:

    • 你好@sasaFajkovic,如果有帮助请采纳答案
    • 感谢您的信息。我今天只是在检查它。所以基本上没有办法使用一些在线生成器将哈希密码添加到数据库中?创建一些测试用户时,我需要在调试模式下运行应用程序,获取生成的哈希并将其插入数据库。
    • 不,我们必须在创建用户时将密码生成到应用程序中,使用 PasswordEncoder 生成密码并将其保存到数据库中
    猜你喜欢
    • 1970-01-01
    • 2019-01-06
    • 2011-04-15
    • 2021-05-09
    • 2021-06-21
    • 2015-12-21
    • 2016-07-03
    • 1970-01-01
    • 2012-01-18
    相关资源
    最近更新 更多