我正在玩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和内存部分的哈希?
答案 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"** />
.......
。测试用例首先传递哈希值,然后是普通密码。你这样做也是如此。