Java 什么';代码行中发生了什么?

Java 什么';代码行中发生了什么?,java,cryptography,aes,Java,Cryptography,Aes,这行代码中发生了什么 SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); 我特别不理解getInstance(“PBKDF2WithHmacSHA1”)部分这个看起来很怪的字符串定义了要使用的密钥算法。它是: PBKDF2WithHmacSHA1 PBKDF2 With Hmac SHA1 带HMACSHA1的PBKDF2 含Hmac SHA1的PBKDF2 PBKDF2函数(来自PKC

这行代码中发生了什么

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

我特别不理解getInstance(“PBKDF2WithHmacSHA1”)部分

这个看起来很怪的字符串定义了要使用的密钥算法。它是:

PBKDF2WithHmacSHA1 PBKDF2 With Hmac SHA1 带HMACSHA1的PBKDF2 含Hmac SHA1的PBKDF2
  • PBKDF2函数(来自PKCS#5 2.0版)
  • 它将使用SHA-1HMAC作为其伪随机数生成器
参考文献
我们在中发现了类似的算法名称,不知何故,PKCS5第2版当时可能没有提供/记录(或者正如brianegge所建议的,可能是出口限制问题,这是加密项的常见问题)。

算法名称确实出现在(AES for Kerberos)中,这可能不是您心目中的应用程序,但定义了相同的应用程序)

不同的Java发行版包含不同的密码。这是由于出口限制和专利。代码行正在请求一个可以创建该类型密钥的工厂

具体而言,PBKDF2WithHmacSHA1使用中的基于密码的密钥派生函数构建密钥。

“PBKDF2”是中定义的用于从密码派生密钥材料的函数

PBKDF2需要一个伪随机函数,在这种情况下,使用基于SHA-1散列的消息身份验证码-“HmacSHA1”

所以,这条生产线正在创建一个工厂。工厂可能会生产
SecretKey
对象,这些对象可用于为对称加密算法或
Mac
算法的
密码
实例设置密钥。或者,它可以用于对现有的
SecretKey
进行“透明”规范

关于PBKDF2需要注意的一点是,它不会为任何特定算法生成密钥。这是一种从种子(密码)生成密钥“材料”的确定方法,这样种子就无法从生成的密钥中恢复。一旦生成了所需的字节数,它们通常会用正确的算法名称包装在
SecretKeySpec


您可以在Java Crypto Architecture文档中看到密钥工厂的其他标准名称。

这是一个返回工厂对象的工厂。WTF@Seth:使用静态工厂方法返回/创建实例是一种相当标准的模式。返回的实例是工厂类还是某个日期格式化程序并不重要,它是Java6中的标准名称。