Passwords Java中带HMAC的PBKDF2
我正在从事一个Java项目,我必须确保明文文件中保存的用户密码的机密性和完整性 为此,我将只在文件中写入密码的散列。更具体地说,我的意图是编写密码和随机salt的散列,再加上随机salt本身,以避免使用rainbow和lookup表。我还想使用PBKDF2进行键拉伸,以使散列的计算变得昂贵。 最后,我想使用键控哈希算法HMAC作为最后一层保护 我试图用Java代码实现我的想法,我发现了一些我在上面介绍的操作示例:Passwords Java中带HMAC的PBKDF2,passwords,java,password-policy,pbkdf2,hmac,Passwords,Java,Password Policy,Pbkdf2,Hmac,我正在从事一个Java项目,我必须确保明文文件中保存的用户密码的机密性和完整性 为此,我将只在文件中写入密码的散列。更具体地说,我的意图是编写密码和随机salt的散列,再加上随机salt本身,以避免使用rainbow和lookup表。我还想使用PBKDF2进行键拉伸,以使散列的计算变得昂贵。 最后,我想使用键控哈希算法HMAC作为最后一层保护 我试图用Java代码实现我的想法,我发现了一些我在上面介绍的操作示例: private static byte[] pbkdf2(char[] passw
private static byte[] pbkdf2(char[] password, byte[] salt, int iterations, int bytes)
throws NoSuchAlgorithmException, InvalidKeySpecException
{
PBEKeySpec spec = new PBEKeySpec(password, salt, iterations, bytes * 8);
SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
return skf.generateSecret(spec).getEncoded();
}
我真正无法理解的是如何输入我的密钥作为HMAC算法使用的密钥,因为它似乎不是函数的输入。我已经阅读了Java文档,但是我找不到解决我的问题的方法
在这一点上,我不确定我是否正确理解了加密机制的不同部分是如何工作的,因此我愿意接受关于这个主题的任何帮助。我想我看到了困惑。显然,您希望代码应用PBKDF2,然后应用HMAC-SHA-1。它不是这样工作的:HMAC-SHA-1在PBKDF2内部使用 其要点是重复应用具有以下特性的函数:
- 它有两个论点李>
- 它返回一个固定大小的值李>
- 它实际上与伪随机函数没有区别