深入研究java加密和散列世界,我看到了PBEKeySpec
类的构造函数示例,其中包含iterationCount
和keyLength
参数的各种值。似乎没有什么能解释这些参数会影响或意味着什么。
我假设keyLength
是密钥的长度,因此密钥长度的32位加密值为32,但这种假设感觉不对。我对iterationCount
的猜测是每个字符被加密的次数,也不再感受到对该假设的喜爱。
赞赏信息或解释的链接。
答案 0 :(得分:29)
迭代计数是在派生对称密钥期间对密码进行哈希处理的次数。数字越大,验证密码猜测越困难,然后导出正确的密钥。它与盐一起使用,用于防止使用彩虹表进行攻击。迭代计数应该尽可能高,而不会过度减慢自己的系统速度。迭代计数的更通用术语是工作因子。
密钥长度是派生对称密钥的位。 DESede密钥可以是128或192位长,包括奇偶校验位。 AES密钥长度可以是128,192或256位。问题是API没有指定密钥长度(比特/字节,有或没有奇偶校验);对于PBEKeySpec
,密钥大小是位,包括本节所示的奇偶校验位。
密钥派生函数通常只输出“足够”的随机位,这就是为什么你仍然可以指定所需的密钥大小。
注意:
new SecureRandom()
然后使用nextBytes(int amount)
)创建64到256位完全随机盐来实现的。 salt可以是公共的,并使用密文或密码哈希存储。