如何模糊数据库密码?

时间:2012-02-27 17:08:03

标签: java jpa passwords persistence embedded-database

我正在使用 JPA2.0 Eclipselink )与数据库交互,我有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 嵌入式数据库组成。

2 个答案:

答案 0 :(得分:2)

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

还可以加密密码,并在客户端解密。虽然这很容易受到字典攻击,甚至可以直接通过反编译程序来反转这个过程。

答案 1 :(得分:0)

在这种情况下,通常会将哈希值存储在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就没有什么坏处。