如何隐藏数据库密码?

Posted

技术标签:

【中文标题】如何隐藏数据库密码?【英文标题】:How to obscure Database password? 【发布时间】:2012-02-27 17:08:03 【问题描述】:

我正在使用 JPA2.0 (Eclipselink) 与 DB 进行交互,并且我有 persistence.xml 文件,其中包含一些 DB 配置。我想隐藏用于访问数据库的密码。我正在使用 Eclipse IDE。 persistence.xml 文件中使用了以下配置标签。

<property name="javax.persistence.jdbc.user" value="app"/>
<property name="javax.persistence.jdbc.password" value="password"/>

我不想在xml 中提及密码。我该怎么做?

注意:我的应用程序是由 Swing 和 Apache 的 Derby Embedded DB 组成的。

【问题讨论】:

【参考方案1】:

您可以让服务器 存储密码,然后您可以使用JNDI 检索它。

也可以加密密码,然后在客户端解密。尽管这很容易受到字典攻击,甚至可以通过反编译您的程序来直接逆转该过程。

【讨论】:

如果 OP 的应用程序将在应用程序服务器中运行,或者在任何 jndi 提供程序之上运行,那么您的答案就是正确的方法。 哦!对不起!我忘了提到我正在使用嵌入式数据库。 @Ahamed,那我真的没有办法。您可以通过在类文件中静态设置它来隐藏它,无论是否加密。【参考方案2】:

在这种情况下通常发生的情况是将哈希存储在 XML 文件中,然后在后端验证哈希是否匹配。

您应该能够执行以下伪代码:

String password = property.getParam(password);  
String user = property.getParam(user);  

function validateHash(String unhashedPassword, String unhashedUser)  
  
    String passHash = generateMD5(unhashedPassword);  
    String userHash = generateMD5(unhashedUser);  

    if(!password.equals(passHash) && !user.equals(userHash)  
      
       throw new SecurityException("Oh noez hackstar");  
      
  

关于使用哪种散列算法的讨论很长,只要您不试图保护核发射代码,MD5 就没有什么坏处。

【讨论】:

当然,但通常不是在您尝试连接到数据库时。 @JohanSjöberg 实际上它在连接到数据库时工作得很好。您确实存储了散列凭据而不是您,因此这个过程很好。如果您要存储明文密码,请立即更改。本质上数据库并不关心。特别是如果我的用户名是 cat 并且我的密码恰好是我的密码 'awesome' 的 MD5 哈希 确实如此。但我的意思是明文密码必须在程序中存储为字符串,这同样不安全,尽管有点模糊。 正确它必须在一天结束时的某个地方。无论是来自用户在启动时的输入还是其他地方。

以上是关于如何隐藏数据库密码?的主要内容,如果未能解决你的问题,请参考以下文章

login.do提交时如何使表单密码数据隐藏在Chrome开发者工具网络面板中?

Clickonce 应用部署,在 app.config 中隐藏密码

如何加密文件和隐藏密码

如何在ios中切换隐藏和查看密码?

如何在隐藏和查看密码之间切换

如何在 TextFormField 中显示/隐藏密码?