这行代码中发生了什么?
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
我特意不了解getInstance(“PBKDF2WithHmacSHA1”)部分
答案 0 :(得分:6)
这个时髦的字符串定义了要使用的密钥算法。它是:
PBKDF2WithHmacSHA1 PBKDF2 With Hmac SHA1
<强>参考强>:
我们在Java Crypto Extension Guide Appending A中找到类似的算法名称,不知何时PKCS5版本2可能尚未提供/记录(或者实际上由brianegge建议,可能是出口限制问题,加密项目的常见问题)。 />
算法名称确实显示在RFC3962(AES for Kerberos)中,这可能不是您想到的应用程序,但已定义,所有相同)
答案 1 :(得分:1)
Java的不同发行版包含不同的加密。这是由于出口限制和专利。代码行正在请求可以创建该类型密钥的工厂。
具体而言, PBKDF2WithHmacSHA1 使用PKCS5 v2.0中的基于密码的密钥派生函数功能构建密钥。
答案 2 :(得分:1)
“PBKDF2”是PKCS #5中定义的函数,用于从密码中导出密钥材料。
PBKDF2需要伪随机函数,在这种情况下,使用基于SHA-1哈希的消息验证代码 - “HmacSHA1”。
所以,这条线正在创建一个工厂。工厂可能会生成SecretKey
个对象,这些对象可用于为Cipher
实例键入对称加密算法或Mac
算法。或者,它可用于制作现有SecretKey
的“透明”规范。
关于PBKDF2的一个重要注意事项是它不会为任何特定算法生成密钥。这是从种子(密码)生成关键“材料”的确定性方法,其方式是无法从生成的密钥中恢复种子。生成所需的字节数后,它们通常包含在SecretKeySpec
中,并带有正确的算法名称。
您可以在Java Crypto Architecture Standard Names文档中查看密钥工厂的其他标准名称。