mar*_*n72 0 java passwords hash hibernate
在我使用servlet和hibernate的web应用程序中.我需要对输入密码的客户进行身份验证.
如果他已经在数据库中,我需要检查他的密码是否与db中的记录匹配.对于新客户,我想获取密码并为他创建记录.我尝试以这种方式为场景做到这一点.
现有客户输入电子邮件地址和密码
String email = req.getParameter("emailAddress");
String password = req.getParameter("password");
Customer cust = dao.findByEmailAddress(email);
Run Code Online (Sandbox Code Playgroud)
现在,如何检查此cust对象是否与密码相关联并且与用户输入的内容相匹配?Manning的hibernate book示例将密码存储为Customer类中的String.这是一个好主意吗?如何将其存储在数据库中?
使用休眠时,如何处理?我听说有人提到将密码存储为哈希.但我不确定如何在我的应用程序中执行此操作.
有人能告诉我如何解决这个问题吗?
存储纯文本密码绝不是一个好主意.事实上,它被列为前25个最危险软件错误中的#8威胁.
您需要在将密码写入数据库之前加密密码.搜索用户时使用加密密码
String email = req.getParameter("emailAddress");
String password = req.getParameter("password");
String encryptedPassword = MD5Helper.hashPassword(password)
Customer cust = dao.findByEmailAddressAndPassword(email, encryptedPassword);
Run Code Online (Sandbox Code Playgroud)
您可以使用类似的方法使用MD5算法加密密码.
public class MD5Helper {
private static final int MD5_PASSWORD_LENGTH = 16;
public static String hashPassword(String password) {
String hashword = null;
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update(password.getBytes());
BigInteger hash = new BigInteger(1, md5.digest());
hashword = hash.toString(MD5_PASSWORD_LENGTH);
} catch (NoSuchAlgorithmException nsae) {
// handle exception
}
return hashword;
}
}
Run Code Online (Sandbox Code Playgroud)