[英]Different length of hashed password using argon2 in python and java
[英]Force Argon2 to return the value of p with a specific length
我正在使用de.mkammerer.argon2库(Java)使用 Argon2 算法对字符串进行编码。 我正在使用 Argon2 的高级接口,因为我需要提供一些配置参数,例如固定盐和固定 hash 长度。
我未能实现的事情是获得具有 17 个字符( defaultHashLen )的固定长度的 p 值。 根据文档,参数以字节为单位。( https://javadoc.io/static/de.mkammerer/argon2-jvm/2.8/de/mkammerer/argon2/Argon2Advanced.html#hashAdvanced(int,int,int,byte %5B%5D,byte%5B%5D,int,de.mkammerer.argon2.Argon2Version) )。
编码为 UTF-8。
有没有办法强制 Argon2 返回最大长度为 17 的编码值? 甚至可能吗?
我试图 substring 结果,但更改 defaultHashLen 的值(即 17,22 )使 p 值在每次执行时完全不同(不知道为什么)。
import de.mkammerer.argon2.*;
import java.time.Instant;
import java.util.Base64;
public class PasswordArgon2Jvm {
private static final int defaultSaltLen = "abcdefghijklmnopqrst".getBytes().length;
private static final byte[] saltArray = "abcdefghijklmnopqrst".getBytes();
private static final int defaultHashLen = 17;
private static final int iterations = 3;
private static final int memory = 1258;
private static final int parallelism = 3;
public void hashPasswordWithCustomSalt(String pass){
// public static Argon2Advanced createAdvanced(Argon2Factory.Argon2Types type, int defaultSaltLength, int defaultHashLength) {
Argon2Advanced argon3 = Argon2Factory.createAdvanced(defaultSaltLen, defaultHashLen);
byte[] password = pass.toUpperCase().getBytes();
HashResult hashInBytes = argon3.hashAdvanced(iterations, memory, parallelism, password, saltArray, defaultHashLen, Argon2Version.DEFAULT_VERSION);
String hashWithFixedSalt = hashInBytes.getEncoded();
String lastBit = hashWithFixedSalt.substring(hashWithFixedSalt.lastIndexOf("$")+1);
System.out.println(
pass + " \n" +
hashWithFixedSalt + " \n" +
lastBit + " \n" +
"length: " + lastBit.length() + " \n" +
"decoded: " + Base64.getDecoder().decode(lastBit));
}
public static void main(String[] args) {
PasswordArgon2Jvm pa2jvm = new PasswordArgon2Jvm();
pa2jvm.hashPasswordWithCustomSalt("santiago2");
}
}
output:
圣地亚哥2
$argon2i$v=19$m=1258,t=3,p=3$ZFh2dGZIWDRYdGpsV3J0OFh4NEM$2kNm9mxm8XaWcW4KIL+G7Eo
2kNm9mxm8XaWcW4KIL+G7Eo
长度:23
解码:[B@1a86f2f1
谢谢!
在花了一些时间看这个之后,我还没有找到一种方法来限制返回的字符数量。 您只能限制返回的字节数,这不一定与编码后的字符数匹配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.