Java AES密钥生成

Java AES密钥生成,java,encryption,aes,Java,Encryption,Aes,我正在尝试用java编写一个简单的密码管理器。我想使用AES 256位加密,使用存储的密码对文件进行加密。此外,我希望用户能够用密码解密文件。在网上阅读其他帖子时,几乎所有人都强调仅仅使用密码作为密钥是不安全的,他们提到使用随机盐来增加安全性。但我不明白在生成密钥时如何使用随机盐。如果我从用户的密码和随机salt创建密钥,那么当他们尝试解密他们的文件时,我如何知道salt是什么?这让我完全糊涂了 目前,我在每一步都使用一个常量salt通过几个不同的散列来运行他们的密码。这是否足够安全,或者我遗漏

我正在尝试用java编写一个简单的密码管理器。我想使用AES 256位加密,使用存储的密码对文件进行加密。此外,我希望用户能够用密码解密文件。在网上阅读其他帖子时,几乎所有人都强调仅仅使用密码作为密钥是不安全的,他们提到使用随机盐来增加安全性。但我不明白在生成密钥时如何使用随机盐。如果我从用户的密码和随机salt创建密钥,那么当他们尝试解密他们的文件时,我如何知道salt是什么?这让我完全糊涂了

目前,我在每一步都使用一个常量salt通过几个不同的散列来运行他们的密码。这是否足够安全,或者我遗漏了什么?任何关于如何安全地从密码生成密钥的帮助都将不胜感激!提前感谢。

使用此库:

这里有一个很好的例子:

很多知名人士都使用这个软件包,如Maven、Eclipse等。

使用这个库:

这里有一个很好的例子:


很多知名人士都使用这个软件包,比如Maven、Eclipse等等。

记住,盐不是秘密。您可以将其附加到加密数据中。salt的目的是防止有人使用预先计算的、用普通密码加密的普通数据字典来“破解”加密文件

通过确保salt是随机的,并将其与密码相结合,可以消除字典攻击的可能性,因为黑客(实际上)不可能拥有使用“salt+密码”预加密的数据数据库。(作为初学者,请参见我的教程之一中的本页。)

您还(有效地)消除了冲突问题:如果两个文件中出现的相同数据块在加密版本中看起来相同,则在两个文件上使用相同的密码可能会给攻击者提供有关内容的线索

不过,您通常还需要采取其他预防措施,因为典型的密码通常不包含太多的熵。例如,8个完全随机的小写字母将产生大约40位的熵;8个符合英语典型模式的小写字母将产生大约20位的熵。换句话说,在2^256个可能的键中,实际上典型的用户将在2^20-2^40范围内的一些小部分中进行选择。对于精明的用户来说,情况会有所好转,但不太可能得到接近256位的熵。(假设在一个“密码短语”中,每个字符大约有2.5-3位的熵,因此一个30个字符的密码短语可以提供大约75位的熵——老实说,有多少人使用类似于30个字符的密码?;使用“完整”可打印ASCII范围的8个完全随机的字符可以提供略低于64位的熵。)

稍微缓解这种情况的一种方法是使用计算复杂的单向函数转换密码(添加了salt),这样黑客就需要花更长的时间来尝试他们想要猜测的每个密钥。再次


为了让您大致了解基于密码的文件加密的陷阱,您可能还想看看我几年前编写的,其中包括一个名为isProbablyCorrectPassword()的方法。结合用于生成候选密码的字典/算法,您可以使用它来评估上述方法的有效性(因为ZIP文件加密使用了这些技术的组合)。

请记住,salt不是秘密。您可以将其附加到加密数据中。salt的目的是防止有人使用预先计算的、用普通密码加密的普通数据字典来“破解”加密文件

通过确保salt是随机的,并将其与密码相结合,可以消除字典攻击的可能性,因为黑客(实际上)不可能拥有使用“salt+密码”预加密的数据数据库。(作为初学者,请参见我的教程之一中的本页。)

您还(有效地)消除了冲突问题:如果两个文件中出现的相同数据块在加密版本中看起来相同,则在两个文件上使用相同的密码可能会给攻击者提供有关内容的线索

不过,您通常还需要采取其他预防措施,因为典型的密码通常不包含太多的熵。例如,8个完全随机的小写字母将产生大约40位的熵;8个符合英语典型模式的小写字母将产生大约20位的熵。换句话说,在2^256个可能的键中,实际上典型的用户将在2^20-2^40范围内的一些小部分中进行选择。对于精明的用户来说,情况会有所好转,但不太可能得到接近256位的熵。(假设在一个“密码短语”中,每个字符大约有2.5-3位的熵,因此一个30个字符的密码短语可以提供大约75位的熵——老实说,有多少人使用类似于30个字符的密码?;使用“完整”可打印ASCII范围的8个完全随机的字符可以提供略低于64位的熵。)

稍微缓解这种情况的一种方法是使用计算复杂的单向函数转换密码(添加了salt),这样黑客就需要花更长的时间来尝试他们想要猜测的每个密钥。再次

为了让您大致了解基于密码的文件加密的陷阱,您可能还想看看我写的