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中的标准名称。