代码行中发生了什么?

时间:2009-11-19 05:48:58

标签: java cryptography aes

这行代码中发生了什么?

SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");

我特意不了解getInstance(“PBKDF2WithHmacSHA1”)部分

3 个答案:

答案 0 :(得分:6)

这个时髦的字符串定义了要使用的密钥算法。它是:

PBKDF2WithHmacSHA1
PBKDF2 With Hmac SHA1
  • PBKDF2 功能(来自PKCS#5版本2.0)
  • 将使用 SHA-1 HMAC 作为其伪随机数生成器

<强>参考
我们在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文档中查看密钥工厂的其他标准名称。