Spring 中的 BCrypt 提供与在线工具不同的哈希值

Sas*_*vic 5 spring bcrypt spring-boot

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

有什么想法吗?

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

    DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
    provider.setPasswordEncoder(new BCryptPasswordEncoder(12));
    provider.setUserDetailsService(bettingBotUserDetailsService);
Run Code Online (Sandbox Code Playgroud)

对于原始密码“admin”,我得到以下结果:

bcrypt-generator.com 有 12 轮:

$2y$12$15h6Idq/TwfcuJu6H1VXie/ao7P4AKlLgIrC5yxbwlEUdJjx9Sl5S
Run Code Online (Sandbox Code Playgroud)

Spring(从调试模式捕获):

$2a$10$ED5wQChpxzagbvhlqEqD2.iIdIKv9ddvJcX0WKrQzSOckgc3RHFLW
Run Code Online (Sandbox Code Playgroud)

Pat*_*mil 10

BCrypt 为相同的 Input 生成不同的盐Bcrypt算法

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

我们可以按如下方式检查普通字符串的哈希值

Boolean isMatch = passwordEncoder().matches(currentPassword,dbPassword);

@Bean
public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
}
Run Code Online (Sandbox Code Playgroud)