gpt4 book ai didi

java - 如何以及在何处存储 Java 桌面应用程序的主密码

转载 作者:搜寻专家 更新时间:2023-10-31 20:34:42 25 4
gpt4 key购买 nike

我正在开发一个将用户密码存储在 .db 文件中的小型 Java 桌面应用程序。当用户创建新数据库时,用户必须为该数据库创建一个主密码,以便访问他们可能选择存储在其中的任何 facebook 或 twitter 密码。我的问题是,我应该在哪里以及如何安全地存储主密码?

我的想法是加密主密码并在存储之前添加盐,然后将密码存储在加密的文本文件或 .db 文件中,然后在用户尝试访问数据库时读取它。我只是在寻找关于这是否是一个好主意,或者是否有更好的选择的指导。

该应用程序是桌面应用程序而不是 Web 应用程序。

最佳答案

最安全的密码存储方式是采用一种连您(您的应用程序)都不知道密码是什么的方式。这是通过使用单向散列来实现的。顾名思义,这是一种方式,没有办法“取消散列”散列值并查看原始值是什么。

加密散列的一个重要特征是散列一个值总是产生相同的散列。The quick brown fox jumps over the lazy dog 的 SHA-2 (256) 散列"将总是生成一个散列d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592 - 虽然无法获取该散列并确定未散列的值是什么,但黑客可以通过彩虹表看到它对应的内容(这就是为什么弱密码,即使经过哈希处理仍然容易受到攻击,世界上每个彩虹表都会有 123456 的哈希值)。

因此,在对密码进行哈希处理之前,我们添加了一种盐(理想情况下,每个用户使用不同的盐)。如果在散列“The quick brown fox jumps over the lazy dog”之前我们添加盐(让我们只使用单词“salt”作为一个简单的例子)我们现在将散列“saltThe quick brown fox jumps over the lazy dog”并得到 b369837c6389d8dddb06cb669961b0ab80f5166cc8cebcfaf9734ed009c31e8b 作为我们的散列。

加盐散列是您应该存储的内容(但是/在任何对您的应用程序有意义的地方)并进行检查。因此,当用户首次创建帐户时,您将:

  1. 获取他们选择的密码并加盐
  2. 对其进行哈希处理(使用无冲突加密哈希,例如 SHA-2 )
  3. 存储结果

当用户尝试登录时,您将:

  1. 获取他们在登录表单中输入的密码并添加盐
  2. 散列
  3. 将其与您存储的内容进行比较

如果不相同,则表明他们输入了错误的密码,如果相同,则您知道他们输入了正确的密码,您可以让他们登录。

关于java - 如何以及在何处存储 Java 桌面应用程序的主密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20002961/

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