java - 为什么我的密码与编码的密码不匹配?

标签 java spring hash

我正在玩 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/

相关文章:

java - 安卓连接超时

java - 如果仅使用 GET,则无法读取 Redis 值

arrays - 如何在 Ruby 中找到哈希数组的平均值

java - 无法使用 ENTER 键调用函数

java - 如何从 Java 内部访问 jvmArgs?

java - 将 pdf/excel 文件动态传输到 Flex UI 应用程序

spring - Groovy:Lombok @NoArgsConstructor 不创建默认构造函数

javascript - 如何区分浏览器返回和用户手动更改位置哈希

algorithm - 应用程序中的密码哈希字符

java - Jetty运行时错误仅在intellij IDEA中