为什么我的密码与encodedPassword不匹配?
问题描述:
我正在玩Spring Security。有一些PasswordEncoders。现在我听说了Argon2和库argon2-jvm。 所以我使用这个库来实现一个Argon2 PasswordEncoder。为什么我的密码与encodedPassword不匹配?
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);
}
}
好的。现在我测试的执行和使用密码“密码”我得到的散列 “$ 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");
=>假
我如何能匹配他们,为什么有一些像哈希paralellism和内存部分的参数?
你是对的!谢谢。 –