sha512-крипта mysql и голубятня
У меня есть вопрос о понимании хэширования SHA512-crypt. Я нашел это учебник для настройки dovecot и postfix с mysql. Я следил за учебником (с небольшими изменениями), и все работает нормально. Но есть одна вещь,которую я не понимаю:--4-->
Добавить пользователя, я должен использовать:
INSERT INTO `mailserver`.`virtual_users`
(`id`, `domain_id`, `password` , `email`)
VALUES
('1', '1', ENCRYPT('firstpassword', CONCAT('$', SUBSTRING(SHA(RAND()), -16))), 'email1@example.com'),
('2', '1', ENCRYPT('secondpassword', CONCAT('$', SUBSTRING(SHA(RAND()), -16))), 'email2@example.com');
и опять же, это работает отлично, т. е. я могу войти в систему с моим паролем (и только моим паролем) в dovecot. Но почему? Если я правильно понимаю, это ... шифрует пароль с помощью случайной соли, но не сохраняет его нигде. Поэтому хэширование одного и того же пароля дважды дает мне 2 разных хэша (я пробовал). Поэтому мой вопрос сводится к: Могу ли я получить краткое объяснение sha-512 (которое я не мог найти в интернете) и объяснить, почему эти строки работают?
спасибо уже
1 ответов
соль сохраняется как часть пароля. Например, вызов:
ENCRYPT('firstpassword', CONCAT('$', 'FooBarBaz'))
дает
$6$FooBarBaz$.Т. г. 7FRJqZ6N2FF7b3BEkr5j37CWhwgvPOOoccrr0bvkbbnmmlcxzqqqkjbnhnhc.583dTBLEuZcDuQe7NEe.
Это хранит как используемый алгоритм (6 - SHA512), так и соль ('FooBarBaz'), обе делинированные $
.
Edit: для проверки пароля вы можете использовать:
password = ENCRYPT('user_input', `password`)
ENCRYPT
схватит соль от, который хранят пароль и используйте это при проверке user_input
.
полный кредит hek2mgl для проверки пароля он подробно в ответ.