匹配db中记录的用户密码

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.这是一个好主意吗?如何将其存储在数据库中?

使用休眠时,如何处理?我听说有人提到将密码存储为哈希.但我不确定如何在我的应用程序中执行此操作.

有人能告诉我如何解决这个问题吗?

Gio*_*sas 5

存储纯文本密码绝不是一个好主意.事实上,它被列为前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)