在Java中具有HMAC的PBKDF2

木瓜

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

为此,我将仅在文件中写入密码的哈希值。更具体地说,我的意图是编写密码和随机盐的哈希,再加上随机盐本身,以避免使用虹彩表和查找表。我还想对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();
}

我真正无法理解的是如何输入我的秘密密钥作为HMAC算法使用的密钥,因为它似乎不是该函数的输入。我已经阅读了Java文档,但是找不到我的问题的解决方案。

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

吉勒斯“别再邪恶了”

我觉得我很困惑。您显然希望您的代码先应用PBKDF2,然后再应用HMAC-SHA-1。这不是它的工作方式:PBKDF2内部使用了HMAC-SHA-1。

PBKDF2的要旨是重复应用具有以下属性的功能:

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

HMAC-SHA-1是这样的功能,并且是常见的选择。PBKDF2还有其他变体,它们使用HMAC-MD5,HMAC-SHA-256或其他功能(但是这些变体不在基本Java库中)。

PBKDF2接受两个数据输入(加上一些配置输入):密码和盐。如果要在计算中包括秘密值,请使用PBKDF2的输入:不要在此之上使用自定义方案(使用自己的密码是做错方法的秘诀)。胡椒粉(所有帐户共有的秘密值)添加到盐(各帐户之间不同的公共值)上。

请注意,胡椒粉用途有限仅当哈希值和Pepper秘密值存储在不同的位置时才有用-例如,如果哈希值在数据库中并且Pepper在不直接受到SQL注入攻击攻击的磁盘文件中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PBKDF2和Java中的HMAC

来自分类Dev

每次按下按钮时,带有HMAC SHA1的Java PBKDF2实现都会返回不同的哈希值?

来自分类Dev

对于PBKDF2,使用HMAC-SHA256比使用HMAC-SHA-1更安全?

来自分类Dev

加密-Express.js是否足以用于PBKDF2 HMAC-SHA1?

来自分类Dev

加密-Express.js是否足以用于PBKDF2 HMAC-SHA1?

来自分类Dev

具有Rfc2898DeriveBytes的PBKDF2对于相同的输入会产生不同的输出吗?

来自分类Dev

没有提供回调给pbkdf2

来自分类Dev

在Java和PHP中使用PBKDF2

来自分类Dev

Java和打字稿产生差异PBKDF2哈希

来自分类Dev

如何在mongoDB中存储加密pbkdf2?

来自分类Dev

jasypt PBKDF2实现

来自分类Dev

存储PBKDF2迭代

来自分类Dev

pbkdf2如何工作?

来自分类Dev

使用带有128位密钥的AES和PBKDF2的Java密码体系结构进行文件加密

来自分类Dev

JAVA的PBKDF2-HMAC-SHA256的可靠实现

来自分类Dev

加快Haskell PBKDF2算法

来自分类Dev

PBKDF2和C#问题

来自分类Dev

加速Haskell PBKDF2算法

来自分类Dev

PBKDF2密码存储-如何验证?

来自分类Dev

Perl中Crypt :: PBKDF2中HMACSHA2哈希的大小是多少?

来自分类Dev

如何在没有nodeJS的情况下使用cryptoJS的函数pbkdf2

来自分类Dev

如何使用PBKDF2在Java和Ruby中生成相同的安全哈希

来自分类Dev

使用盐和迭代计数的用户密码的Java / Node PBKDF2哈希-等效节点

来自分类Dev

这是PBKDF2 java的实现,很好的实现吗?已是最新?

来自分类Dev

Rfc2898 / PBKDF2以SHA256作为C#中的摘要

来自分类Dev

验证.NET中Python Passlib生成的PBKDF2 SHA512哈希

来自分类Dev

javascript和iOS中的PBKDF2哈希生成不同的密钥

来自分类Dev

验证.NET中Python Passlib生成的PBKDF2 SHA512哈希

来自分类Dev

如何从密码和 PBKDF2 迭代中获取原始密钥数据

Related 相关文章

热门标签

归档