如何以安全的方式存储用户名和密码

时间:2015-05-04 02:13:27

标签: java passwords password-encryption

我正在构建一个必须与活动目录(AD)服务器和另一个Web服务(WS)服务器通信的Java Web应用程序。 AD& WS要求使用同一组用户名和密码进行身份验证。我该如何以安全的方式存储用户名和密码?

我目前正在考虑将加密密码存储在数据库中,而密钥存储在.war文件中捆绑的Web应用程序中。应用服务器和数据库服务器在不同的机器上。这是完成这项任务的合适方式吗?请建议是否有更好的方法来做到这一点

3 个答案:

答案 0 :(得分:0)

尝试将集中用户身份验证作为服务,并使用cookie来存储用户信息。

答案 1 :(得分:0)

您可以对密码和用户名进行编码,并将其存储在您想要的位置。并在阅读后解码它。 幸运的是,在我的应用程序中,我创建了一个包含编码和解码字符串的类的库包。您应该向我提供您的电子邮件,以便我可以将jar文件发送给您。

要编码,您可以使用类似的代码

 String encode(String s){
char[] ret=new char[s.length];
for(int i=0;i<s.length();i++)
{
 ret[i]=(char)((s.charAt(i)+23)*i+12);
 }
String encoded=new String(ret);
return encoded;
 }

您可以反向编写以解码编码的字符串。 不要使用自己的算法复制它

答案 2 :(得分:-1)

您可以使用支持加密功能的MessageDigest类(例如MD5),并使用它来将客户端上的字符串密码转换为字节数组,并将其传输到服务器。您不需要在服务器上保存字符串,并且只会比较编码的字节数组。 例如:

String password = null;
byte[] encoded = null;
try {
    MessageDigest md = MessageDigest.getInstance("MD5");
    encoded = md.digest(password.getBytes("UTF-8"));
} 
catch (NoSuchAlgorithmException | UnsupportedEncodingException e) {
    e.printStackTrace();
}