gpt4 book ai didi

java - Spring Security BCrypt 密码编码器 - 工作负载因素

转载 作者:行者123 更新时间:2023-12-02 03:30:18 24 4
gpt4 key购买 nike

我正在将 Spring Security 的 Bcrypt 密码编码器集成到一个新应用程序中,在测试时我注意到,使用具有不同工作因素的两个编码器来匹配密码时,工作负载似乎没有影响。举个例子:

public static void main(String[] args) {
PasswordEncoder strongEncoder = new BCryptPasswordEncoder(12);
PasswordEncoder weakEncoder = new BCryptPasswordEncoder(6);

String password = "SomePassword@@";

String strongEncodedPass = strongEncoder.encode(password);
String weakEncodedPass = weakEncoder.encode(password);

//Prints true
System.out.println(weakEncoder.matches(password, strongEncodedPass));
//Prints true
System.out.println(strongEncoder.matches(password, weakEncodedPass));
}

由于编码器使用不同的工作负载,两个 print 语句是否都应该返回 false?

以上示例是在 Java 8 中使用 spring-security-core-4.1.0.RELEASE.jar 进行测试的

最佳答案

如果您查看有关 BCrypt 的维基百科文章 ( https://en.wikipedia.org/wiki/Bcrypt ),您会注意到哈希的格式包含轮数

For example, the shadow password record $2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy specifies a cost parameter of 10, indicating 210 key expansion rounds. The salt is N9qo8uLOickgx2ZMRZoMye and the resulting hash is IjZAgcfl7p92ldGxad68LJZdL17lhWy.

因此,当检查密码是否与哈希值匹配时,它会被哈希与原始哈希值相似的次数。

换句话说:matches() 独立于设置,并且可能是静态的......

关于java - Spring Security BCrypt 密码编码器 - 工作负载因素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38192405/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com