gpt4 book ai didi

java - PBKDF2WithHmacSHA256 key 长度对输出长度的影响

转载 作者:行者123 更新时间:2023-11-30 05:26:21 25 4
gpt4 key购买 nike

考虑以下 java 代码:

KeySpec spec = new PBEKeySpec("pass".toCharArray(), "salt".getBytes(),
10000, 512);
SecretKeyFactory f = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
System.out.println(f.generateSecret(spec).getEncoded().length);

此代码输出“64”。所以 64 字节,而 SHA-256 是 32 字节哈希值。

我知道我指定了 512 位(64 字节)作为 key 长度。
但是我期望生成的 key (PBKDF2) 将通过 SHA-256 进行哈希处理,以便输出应始终为 32 字节,无论我使用什么 key 大小。

我缺少什么(或者为什么我的期望是错误的)?

最佳答案

我们可以将 PBKDF 写为 DK = PBKDF2(PRF, Password, Salt, c, dkLen)

  • PRF 是伪随机函数,输出长度为 hlen
  • dkLen 是派生 key 所需的位长度
  • 'c'是迭代次数

如何计算;

DK = T1 ‖ T2 ‖ ... ‖ T_{dklen/hlen}

其中 Ti = F(Password, Salt, c, i) 并且每个都有 hlen 大小。

F(Password, Salt, c, i) = U1 ⊕ U2 ⊕ ... ⊕ Uc

U1 = PRF(Password, Salt + INT_32_BE(i))
U2 = PRF(Password, U1)
...
Uc = PRF(Password, Uc-1)

dklen 最多可以是后端哈希 (PRF) 输出大小的 2^32 - 1 倍。

如您所见,只需对 i 32 位编码值的 salt 进行少量修改,PBKDF2 就可以输出多个 hlen 输出。

关于java - PBKDF2WithHmacSHA256 key 长度对输出长度的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58508998/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com