繁体   English   中英

如何使用md5哈希密码登录?

[英]How to login with md5 hashed passwords?

我已经散列密码并将其存储在数据库中。 但是我无法在不解密密码的情况下登录。 我该怎么做呢?

我的代码试图这样做但不起作用:

@RequestMapping(method = RequestMethod.POST)
public String processLogin(Person user, BindingResult result, 
                           @RequestParam("userName") String username, 
                           @RequestParam("password") String password) {
    try {
        password = Hex.encodeHexString(MessageDigest.getInstance("SHA-256").digest());
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    ValidateUser(username, password);

    String destination = "";
    if (success == true) {
        destination = "redirect:/person.html";
    }
    else {
        destination = "redirect:/index.html";
    }
    return destination;
}

public boolean ValidateUser(String username, String password) {
    // Decrypt password here.
    List<Person> users = service.getAllPersons();

    for (Person allUsers : users) {
        if (allUsers.getUserName().equals(username) && 
            allUsers.getPassword().equals(password)) {
            success = true;
        }
    }
    return success;
}

这是我的md5哭泣:

public void setPassword(String password) {
    String md5 = null;
    try {
        // Create MessageDigest object for MD5
        MessageDigest digest = MessageDigest.getInstance("MD5");

        // Update input string in message digest
        digest.update(password.getBytes(), 0, password.length());

        // Converts message digest value in base 16 (hex)
        md5 = new BigInteger(1, digest.digest()).toString(16);

    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    this.password = md5;
}

您还可以加密用户在登录时输入的密码,然后比较两个哈希值。 因此,您需要使用相同的加密方法来存储密码和检查密码。

您不解密md5哈希,您编码用户提供的密码,并根据数据库中的哈希进行检查。

为了提高安全性,您还应该在散列之前为密码添加salt。 MD5不是一个很好的密码散列算法,因为它专为速度而设计,与您想要的相反,您希望密码生成相对较慢,因此请使用更安全的算法,并多次散列。

您可以使用SHA-256生成哈希:

MessageDigest md = MessageDigest.getInstance("SHA-256");
String password = "some password";

md.update(password.getBytes("UTF-8"));
byte[] digest = md.digest();

将哈希值插入数据库时​​使用相同的算法,如在登录期间收到密码,并匹配数据库中的哈希值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM