为什么我的密码与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和内存部分的参数?

看着在氩气2库的测试代码在GitHub,我想你打电话verfiy错误的参数顺序。测试用例首先传递散列值,然后传递明文密码。你反之亦然。

+0

你是对的!谢谢。 –