这行代码发生了什么?
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
我特别不明白 getInstance("PBKDF2WithHmacSHA1") 部分
这行代码发生了什么?
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
我特别不明白 getInstance("PBKDF2WithHmacSHA1") 部分
这个看起来很时髦的字符串定义了要使用的密钥算法。这是:
PBKDF2WithHmacSHA1 带有 Hmac SHA1 的 PBKDF2
参考:我们在Java Crypto Extension Guide Appending A
中发现了类似的算法名称,不知何故 PKCS5 版本 2 可能当时不可用/记录在案(或者实际上正如 brianegge 所建议的那样,可能是出口限制问题,这是加密项目的常见问题) .
算法名称确实出现在RFC3962(Kerberos 的 AES)中,这可能不是您想到的应用程序,但定义的都是一样的)
Java 的不同发行版包含不同的加密。这是由于出口限制和专利。这行代码正在请求可以创建该类型密钥的工厂。
具体来说,PBKDF2WithHmacSHA1使用PKCS5 v2.0中的基于密码的密钥派生函数函数构造密钥。
“PBKDF2”是PKCS #5中定义的函数,用于从密码中获取密钥材料。
PBKDF2 需要一个伪随机函数,在这种情况下,使用基于 SHA-1 哈希的消息认证码——“HmacSHA1”。
所以,这条线正在创建一个工厂。工厂可能会生成SecretKey
可用于Cipher
为对称加密算法或Mac
算法的实例加密的对象。或者,它可以用来对现有的SecretKey
.
关于 PBKDF2 需要注意的一件重要事情是它不会为任何特定算法生成密钥。这是一种从种子(密码)生成密钥“材料”的确定性方式,使得无法从生成的密钥中恢复种子。一旦生成了所需的字节数,它们通常用SecretKeySpec
正确的算法名称包装在 a 中。
您可以在 Java Crypto Architecture Standard Names文档中查看密钥工厂的其他标准名称。