我正在玩 Spring Security。有一些密码编码器。现在我听说了 Argon2 和图书馆 argon2-jvm 。 所以我使用这个库来实现 Argon2 PasswordEncoder。
import de.mkammerer.argon2.Argon2;
import de.mkammerer.argon2.Argon2Factory;
import org.springframework.security.crypto.password.PasswordEncoder;
public class Argon2PasswordEncoder implements PasswordEncoder {
private final static Argon2 ARGON2 = Argon2Factory.create();
@Override
public String encode(CharSequence rawPassword) {
return ARGON2.hash(2, 512, 1, rawPassword.toString());
}
@Override
public boolean matches(CharSequence rawPassword, String encodedPassword) {
return ARGON2.verify(rawPassword.toString(), encodedPassword);
}
}
好的。现在我测试了实现,并使用密码 "Password" 我得到了 "$argon2i$v=19$m=512,t 的哈希值=2,p=1$RXlcbec6BOFAo7tfgeAp7g$z4mUln5y/ylkmNjoK8u3wmQYQxwBzWyRepQaZlGtSPw"
但这不可能是哈希值,我认为哈希值是p=之后的部分,不是吗?
好吧,然后我尝试匹配它们,但失败了。为什么?
System.out.println(encoder.matches("Password", "$argon2i$v=19$m=512,t=2,p=1$RXlcbec6BOFAo7tfgeAp7g$z4mUln5y/ylkmNjoK8u3wmQYQxwBzWyRepQaZlGtSPw");
=> 假
System.out.println(encoder.matches("Password", "1$RXlcbec6BOFAo7tfgeAp7g$z4mUln5y/ylkmNjoK8u3wmQYQxwBzWyRepQaZlGtSPw");
=> 假
如何匹配它们以及为什么存在一些参数,例如哈希的并行性和内存部分?
最佳答案
查看 argon2-library 的测试代码 GitHub ,我认为您使用错误的参数顺序调用 verfiy
。测试用例首先传递哈希值,然后传递纯密码。反之亦然。
关于java - 为什么我的密码与编码的密码不匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46581770/