Сравните состояние двух зашифрованных паролей - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь реализовать проверку входа, функция получает учетные данные от GUI и сравнивает пользователей, пароли, которые зашифрованы, я не знаю, как сравнить пароль, указанный в качестве ввода, с паролем в. json файле

Функция выглядит следующим образом:

public static void checkUsers(String username,String password,String role) {
        for (User user : users) {
            if (Objects.equals(username, user.getUsername()))
            {
                //passwords to be compared
            }
    }

Шифрование выглядит следующим образом:

  public static String encodePassword(String salt, String password) {
        MessageDigest md = getMessageDigest();
        md.update(salt.getBytes(StandardCharsets.UTF_8));

        byte[] hashedPassword = md.digest(password.getBytes(StandardCharsets.UTF_8));

        // This is the way a password should be encoded when checking the credentials
        return new String(hashedPassword, StandardCharsets.UTF_8)
                .replace("\"", ""); //to be able to save in JSON format
    }

    private static MessageDigest getMessageDigest() {
        MessageDigest md;
        try {
            md = MessageDigest.getInstance("SHA-512");
        } catch (NoSuchAlgorithmException e) {
            throw new IllegalStateException("SHA-512 does not exist!");
        }
        return md;
    }

1 Ответ

0 голосов
/ 30 апреля 2020

Для фиксированной соли и фиксированного пароля алгоритм хеширования всегда будет возвращать фиксированный дайджест. Для каждого пользователя нужно хранить соль и дайджест. Когда пользователь хочет войти, вы должны указать его индивидуальную соль. Они рассчитают свой дайджест и вернут его вам. Затем ваша задача сравнить их возвращенный дайджест с вашим сохраненным дайджестом, и это подтвердит, что они ввели правильный пароль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...