深入研究Java加密和哈希世界,我看到了PBEKeySpec类的构造函数示例,其中包含iterationCount和和keyLength参数的各种值。似乎没有任何东西可以解释这些参数的影响或含义。
PBEKeySpec
iterationCount
keyLength
我假设这keyLength是密钥的长度,因此32位加密将为密钥长度取32的值,但是这种假设感觉不对。我的猜测iterationCount是对每个字符进行加密的次数,同样,在这种假设下也不会感到爱。
信息链接或说明,不胜感激。
迭代次数是派生对称密钥期间对密码进行哈希处理的次数。数字越大,验证密码猜测然后导出正确密钥的难度就越大。它与盐一起使用,用于防止使用彩虹表的攻击。迭代次数应尽可能高,而不会降低您自己的系统的速度。迭代计数的一个更通用的术语是 工作因子 。
密钥长度是导出的对称密钥的 以位 为单位的长度。DESede密钥的长度可以为128或192位,包括奇偶校验位。AES密钥的长度可以为128、192或256位。问题在于API没有指定要使用的密钥长度(位/字节,带或不带奇偶校验);为PBEKeySpec密钥大小是位,包括如本节中示出的奇偶校验位。
密钥派生功能通常仅输出“足够”的随机位,因此这就是为什么您仍可以指定所需的密钥大小的原因。
笔记:
new SecureRandom()
nextBytes(int amount)