Java - 如何存储应用程序中使用的密码? [复制]

Posted

技术标签:

【中文标题】Java - 如何存储应用程序中使用的密码? [复制]【英文标题】:Java - How to store password used in application? [duplicate] 【发布时间】:2012-01-01 23:10:13 【问题描述】:

我正在开发一个从数据库读取一些数据的应用程序。 与数据库的连接是通过标准的登录/密码机制执行的。

问题是:如何存储db密码? 如果我将其存储为类成员,则可以通过反编译操作轻松检索。

我认为混淆并不能解决问题,因为在混淆代码中也可以很容易地找到字符串密码。

有人有建议吗?

【问题讨论】:

是你的数据库,还是客户的数据库。如果是客户的数据库,他应该知道它的密码。如果是你的数据库,它在哪里?为什么客户应用程序会直接访问数据库,而不通过存储密码的服务器,以及客户端无法使用字节码的服务器? 我通常将它硬编码为使用 Rot13 加密的字符串存储在我的应用程序中。 (开玩笑)。 如果您使用的是 Java EE,有一些标准机制可以处理这个问题……但我猜您不是。如果您的应用程序提供对数据库的完全访问权限,我认为隐藏密码对安全性没有帮助。 相关问题:***.com/questions/992019/… 【参考方案1】:

切勿将密码硬编码到您的代码中。这是最近在Top 25 Most Dangerous Programming Mistakes

将秘密帐户和密码硬编码到您的软件中非常方便——对于熟练的逆向工程师而言。如果所有软件的密码都相同,那么当密码不可避免地为人所知时,每个客户都会变得容易受到攻击。而且因为它是硬编码的,所以修复起来非常痛苦。

您应该将配置信息(包括密码)存储在应用程序启动时读取的单独文件中。这是防止密码因反编译而泄漏的唯一真正方法(从一开始就不要将其编译成二进制文件)。

查看这个精彩的答案以获得更详细的解释:By William Brendel

【讨论】:

【参考方案2】:

对于不想涉及很多其他安全措施的小而简单的应用程序,这可能应该是一个配置选项。当您部署应用程序时,它可以读取指定数据库连接属性的配置文件。这意味着应用程序本身不知道密码,但您需要访问服务器才能找到密码。

【讨论】:

【参考方案3】:

一些数据应该是可配置的。刚才如你所说,可能是usernamepassword或者一些常见的datas;通常我们所做的是创建一个属性配置页面。我以前做的是使用XML 文件,将password/username 保留为encrypted 格式。您可以轻松解析XML 以检索您的连接密码。

这确保了您的密码可以随时更改的可靠性。这不仅仅指密码。但您使用的任何数据,都是不时配置的。

【讨论】:

以上是关于Java - 如何存储应用程序中使用的密码? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

通过 Java 在 Windows 中存储密码的位置

如何加密/解密来自 JPasswordField Java 的密码

ChemDraw如何绘制复杂环化合物

如何将 UCanAccess 连接到使用数据库密码加密的 Access 数据库?

如何在移动应用程序中安全地存储密码

Java 使用 char[] Array 还是 String 存储字符串密码