我正在构建一个必须与活动目录(AD)服务器和另一个Web服务(WS)服务器通信的Java Web应用程序。 AD& WS要求使用同一组用户名和密码进行身份验证。我该如何以安全的方式存储用户名和密码?
我目前正在考虑将加密密码存储在数据库中,而密钥存储在.war文件中捆绑的Web应用程序中。应用服务器和数据库服务器在不同的机器上。这是完成这项任务的合适方式吗?请建议是否有更好的方法来做到这一点
答案 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();
}