gpt4 book ai didi

passwords - Java 中带有 HMAC 的 PBKDF2

转载 作者:搜寻专家 更新时间:2023-11-01 01:21:44 25 4
gpt4 key购买 nike

我正在从事一个 Java 项目,我必须确保保存在纯文本文件中的用户密码的 secret 性和完整性。

为此,我将只在文件中写入密码的哈希值。更具体地说,我的意图是编写密码的哈希值和随机盐,加上随机盐本身,以避免使用彩虹表和查找表。我还想将 key 扩展与 PBKDF2 一起使用,以使散列的计算在计算上变得昂贵。最后,我想使用键控哈希算法 HMAC 作为最后一层保护。

我正在尝试在 Java 代码中实现我的想法,并且我找到了上面介绍的操作的一些示例:

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();
}

我真正无法理解的是如何输入我的 key 作为 HMAC 算法使用的 key ,因为它似乎不是函数的输入。我已查看 Java 文档,但找不到解决我的问题的方法。

在这一点上,我不确定我是否正确理解了加密机制的不同部分是如何工作的,所以我愿意接受有关该主题的任何帮助。

最佳答案

我想我看到了困惑。您显然希望您的代码应用 PBKDF2,然后应用 HMAC-SHA-1。它不是这样工作的:HMAC-SHA-1 在 PBKDF2 中使用。

要点PBKDF2是重复应用具有以下属性的函数:

  • 它有两个参数;
  • 它返回一个固定大小的值;
  • 它实际上与伪随机函数没有区别。

HMAC-SHA-1 就是这样一个函数,也是一个常见的选择。 PBKDF2 还有其他变体,使用 HMAC-MD5、HMAC-SHA-256 或其他函数(但这些变体不在基本 Java 库中)。

PBKDF2 接受两个数据输入(加上一些配置输入):密码和盐。如果你想在计算中包含一个 secret 值,PBKDF2 的输入就是它的地方:不要在此之上添加自定义方案(做你自己的加密是错误的秘诀)。附加 pepper (所有帐户共有的 secret 值)加盐(帐户之间不同的公共(public)值)。

请注意 pepper is of limited usefulness .它仅在散列和胡椒 secret 值存储在不同位置时才有用——例如,如果散列在数据库中而胡椒在磁盘文件中,该磁盘文件不会直接受到 SQL 注入(inject)攻击。

关于passwords - Java 中带有 HMAC 的 PBKDF2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20047418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com