首页 > 解决方案 > 密码保护 Java 控制台应用程序的最佳方法

问题描述

我正在寻找密码保护控制台应用程序的最佳实践或标准方法。我研究了各种方法,希望对我的方法有一些反馈。

我决定使用 Argon2 对我的密码进行哈希处理,这样我只需要存储单向哈希。一切都按预期工作。我的问题是我在哪里存储哈希?它应该是硬编码的吗?我应该将它存储在一个单独的文件中并读入吗?解决此问题的最安全方法是什么?归根结底,我正在编写此应用程序来学习,并且非常想学习以正确的方式进行操作。任何相关阅读材料的链接也将不胜感激。我继续谷歌...

编辑:那么,如果我将程序密码作为哈希存储在文件中,那么潜在的缺点是什么。用户必须知道密码才能使用该应用程序。那么让被哈希保护的程序密码作为加密密钥来保护敏感信息呢?即使源代码和/或哈希文件被操纵,敏感数据也将无法读取,因为正确的密码被用作密钥......我错过了什么?

标签: javahashcryptography

解决方案


首先,Argon2 是一个精细的密钥派生函数,用于将密码转化为加密密钥。

但是,如果您使用 Argon2 哈希作为加密密钥,那么显然不要将其存储在磁盘上。如果您将加密密钥存储在加密数据旁边,您可能根本不加密。人们甚至可以争辩说它更糟,因为它给人一种虚假的安全感。

如果没有密钥,正确加密的数据将毫无用处,因此您不必保护应用程序本身。如果您需要加密或解密某些内容,只需询问密码即可。您可以考虑将哈希在内存中保留一段时间,这样您就不必反复请求它,但不要持久保存它。

例如,这正是 GPG 的工作方式。它不会在任何地方存储任何密码哈希。相反,它存储加密的私钥,如果需要解密私钥,只需询问密码。


推荐阅读