为什么我的密码与encodedPassword不匹配?

时间:2017-10-05 09:09:01

标签: java spring hash

我正在玩Spring Security。有一些PasswordEncoders。现在我听说过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);
    }
}

确定。现在我测试了实现并使用密码密码我得到 $ 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和内存部分的哈希?

1 个答案:

答案 0 :(得分:2)

GitHub查看argon2-library的测试代码,我认为你用错误的参数顺序调用<?xml version="1.0"?> <template minApi="7" minBuildApi="8"> ....... <parameter id="hasTabLayout" name="Have Tab Layout" type="boolean" default="false"/> <parameter id="hasRecycleViewTabOne" name="Tab one have recycleView" type="boolean" default="false"/> <parameter id="adapterTabOneName" name="Adapter Tab One Name" type="string" constraints="class|unique|nonempty" default="BlankTabOneItem" **visibility="hasTabLayout && hasRecycleViewTabOne"** /> ....... 。测试用例首先传递哈希值,然后是普通密码。你这样做也是如此。