繁体   English   中英

强制 Argon2 返回具有特定长度的 p 值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM