У меня есть сервер Dovecot с базой данных MySQL для хранения имен пользователей и паролей. Пароли в базе данных находятся в схеме SHA512-CRYPT.как SHA512-CRYPT для Dovecot в JAVA?
Я вставляю хэшированные пароли в базу данных с помощью скрипта.
doveadm pw -s SHA512-CRYPT -p password -r 500000
Я хочу использовать пароли с использованием приложения JAVA. Я нашел this questions, и я попытался создать тот же полученный хеш, используя тот же пароль firstpassword
и соль FooBarBaz
. По какой-то причине полученный хэш, который я получаю, отличается, хотя я использую тот же алгоритм хэширования, соль и пароль.
Вот мой Java код:
byte[] password = "firstpassword".getBytes();
byte[] salt = "FooBarBaz".getBytes();
MessageDigest digest = MessageDigest.getInstance("SHA-512");
digest.reset();
digest.update(salt);
byte[] hashed = digest.digest(password);
String encodedHash = Base64.getEncoder().encodeToString(hashed);
System.out.printf("{SHA512-CRYPT}$6$%s$%s", "FooBarBaz",encodedHash);
Это выводит хэш:
{SHA512-CRYPT}$6$FooBarBaz$5WPtOnXVI/a6f003WByGKIcsfa6x0ansxiyE8uEfJ0TE5pI+Rv9kcMLgdZboKg7ZSWQgWFg+pIqruvdg6aiP/g==
Я также попытался поменять местами порядок соль + пароль, чтобы сделать это:
digest.update(password);
byte[] hashed = digest.digest(salt);
это дает мне:
{SHA512-CRYPT}$6$FooBarBaz$QWS8+W5EWhModF+uO2tcsd55tDxzdzGJ5FurIbEgwVCwKfT5UqwIvBNG1Oyws8bZEFdeGgyD0u6zS1KArvGf9Q==
Кто-нибудь есть идеи, как я могу выполнить те же результаты хэша в Java, если я использую один и тот же пароль и соль?
Хэша Я ищу это:
{SHA512-CRYPT}$6$FooBarBaz$.T.G.7FRJqZ6N2FF7b3BEkr5j37CWhwgvPOOoccrr0bvkBbNMmLCxzqQqKJbNhnhC.583dTBLEuZcDuQe7NEe.
Я предполагаю, что sha генерирует случайные хэши для одних и тех же строк и солей. Вам просто нужно проверить их с помощью встроенных функций проверки – waplet
@waplet, это неверно. Тот же вход = тот же хеш, это одно из основных требований каждого алгоритма хеширования. Кроме того, операционная система запрашивает явно, как создавать эти хэши, а не проверять их. – bratkartoffel