PBEKeySpec对iterationCount和keyLength参数有何影响?

深入研究java加密和散列世界,我看到了PBEKeySpec类的构造函数示例,其中包含iterationCountkeyLength参数的各种值。 似乎没有什么能解释这些参数的影响或意义。

我假设keyLength是密钥的长度,因此密钥长度的32位加密值为32,但这种假设感觉不对。 我对iterationCount猜测是每个char加密的次数,也不再感受到对这个假设的喜爱。

欢迎链接到信息或解释。

迭代计数是在派生对称密钥期间密码被散列的次数。 数字越大,暴力破坏钥匙就越困难。 它与盐一起使用,用于防止使用彩虹表进行攻击。 迭代计数应该尽可能高,而不会过度减慢自己的系统速度。

密钥长度是派生的对称密钥的长度。 DESede密钥可以是128或192位长,包括奇偶校验位。 AES密钥长度可以是128,192或256位。 问题是API没有指定密钥长度(比特/字节,有或没有奇偶校验); 对于PBEKeySpec ,密钥大小是位,包括本节所示的奇偶校验位。

密钥派生函数通常只输出“足够”的随机位,这就是为什么你仍然可以指定所需的密钥大小。


笔记:

  • 有关详细信息,请查看标准 ,PKCS标准往往相对容易阅读。
  • 为密钥大小指定大于散列输出大小的任何值(默认情况下,这是SHA-1,160位输出大小)可能会失败(对于PBKDF1)或导致额外减速(对于PBKDF2)。 不建议。