PBEKeySpec迭代计数和keyLength参数有什么影响?

| 深入研究Java加密和哈希世界,我看到了
PBEKeySpec
类的构造函数示例,其中带有
iterationCount
keyLength
参数的各种值。似乎没有什么可以解释这些参数的影响或含义。 我假设密钥长度为
keyLength
,因此32位加密将密钥长度取值为32,但是这种假设是错误的。我对ѭ1的猜测是每个字符被加密的次数,同样在这种假设下也没有感受到爱。 信息链接或说明,不胜感激。     
已邀请:
迭代计数是在对称密钥派生期间对密码进行哈希处理的次数。数字越大,验证密码猜测然后导出正确密钥的难度就越大。它与盐一起使用,用于防止使用彩虹表的攻击。迭代次数应尽可能高,而不会降低您自己的系统的速度。迭代计数的一个更通用的术语是工作因子。 密钥长度是派生的对称密钥的以位为单位的长度。 DESede密钥的长度可以为128或192位,包括奇偶校验位。 AES密钥的长度可以为128、192或256位。问题在于API没有指定要使用的密钥长度(位/字节,带或不带奇偶校验);对于“ 0”,密钥大小是位,包括本节中所示的奇偶校验位。 密钥派生功能通常仅输出“足够”的随机位,因此这就是为什么您仍可以指定所需的密钥大小的原因。 笔记: 有关更多信息,请查看该标准,PKCS标准往往相对容易阅读。 盐只需要是唯一的即可;通常,这是通过使用安全随机数生成器创建64至256位完全随机盐(对于Java来说,先使用
new SecureRandom()
,然后再
nextBytes(int amount)
)来实现的。盐可以是公开的,并可以与密文或密码哈希一起存储。 为密钥大小指定任何大于散列输出大小的值(默认情况下为SHA-1,输出大小为160位)可能会失败(对于PBKDF1)或导致其他速度变慢(对于PBKDF2)。不建议;只需在算法规范中使用哈希函数,例如SHA-256,SHA-512。 SHA-1(有时因为从未使用过SHA-0而被称为SHA),甚至MD5仍对这种功能完全安全(因为它不依赖于碰撞阻力),但您仍应选择更安全的选择例如SHA-256或SHA-512用于新协议。     

要回复问题请先登录注册