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