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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PBEKeySpec对iterationCount和keyLength参数有何影响?相关的知识,希望对你有一定的参考价值。

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

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

欢迎链接到信息或解释。

答案

迭代计数是在派生对称密钥期间密码被散列的次数。数字越大,验证密码猜测越困难,然后导出正确的密钥。它与盐一起使用,用于防止使用彩虹表进行攻击。迭代计数应该尽可能高,而不会过度减慢自己的系统速度。迭代计数的更通用术语是工作因素。

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

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


笔记:

  • 有关更多信息,请查看the standard,PKCS标准往往相对容易阅读。
  • 盐只需要是独特的;通常,这是通过使用安全随机数生成器(对于Java表示使用new SecureRandom()然后使用nextBytes(int amount))创建64到256位完全随机盐来实现的。 salt可以是公共的,并使用密文或密码哈希存储。
  • 为密钥大小指定大于哈希输出大小的任何值(默认情况下,这是SHA-1,160位输出大小)可能会失败(对于PBKDF1)或导致额外减速(对于PBKDF2)。不建议;只需在算法规范中使用哈希函数,如SHA-256,SHA-512。
  • SHA-1(有时也称为SHA,因为SHA-0从未使用过),甚至MD5对于这种功能仍然是完全安全的(因为它不依赖于碰撞阻力)但你仍然应该寻求更安全的选择,例如用作新协议的SHA-256或SHA-512。

以上是关于PBEKeySpec对iterationCount和keyLength参数有何影响?的主要内容,如果未能解决你的问题,请参考以下文章

AES 自定义密码密钥

postman之pm对象详解

android基于口令加密快速搞懂

Java Cipher - PBE 线程安全问题

逆序对

初一数学教案有序数对