关于Java:Java – 如何存储应用程序中使用的密码?

Java - How to store password used in application?

本问题已经有最佳答案,请猛点这里访问。

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

问题是:如何存储数据库密码?如果将它存储为类成员,则可以通过反编译操作轻松地检索到它。

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

有人有建议吗?


不要将密码硬编码到代码中。这是最近在25个最危险的编程错误中提出的

Hard-coding a secret account and password into your software is extremely convenient -- for skilled reverse engineers. If the password is the same across all your software, then every customer becomes vulnerable when that password inevitably becomes known. And because it's hard-coded, it's a huge pain to fix.

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

更详细的解释请看这个精彩的答案:威廉·布伦德尔


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

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


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