2015-07-09 7 views
2

Я использую учебное пособие по настройке почтового сервера (его уже работает), и я также хочу использовать таблицу пользователей для входа на веб-сайт.Как проверить пароль хэширования mysql с солью

SQL, что учебник используется для создания учетной записи является:

INSERT INTO 'mailserver'.'virtual_users' 
('id', 'domain_id', 'password' , 'email') 
VALUES ('1', '1', 
ENCRYPT('PASSWORD', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 
'[email protected]'); 

Как я вижу это,

ENCRYPT ('PASSWORD', CONCAT ('$ 6 $', SUBSTRING (ША (RAND()), -16)))

Создает соленый хэш, не так ли? дело в том, что соль выглядит случайным, а не сохраненным значением.

Как я могу сравнить его с паролем, предоставленным пользователем?

Postfix не имеет никаких проблем в делать это, так как он работает, так что я должен быть что-то отсутствует

+1

Функция ENCRYPT будет выдавать «соленый» строка с префиксом самой соли, так при подаче обратно зашифрованный пароль будет повторно подавать оригинальную соль. –

+0

@MarkBaker, ох, я понятия не имел. Можете ли вы установить пример выбора, который проверяет правильность ответа? Таким образом, я могу дать вам полный ответ. – monxas

ответ

1

Шифровать функция выведет «соленый» строка с префиксом самой солью, чтобы кормить его обратно зашифрованная пароль будет повторно подавать оригинальную соль.

Когда вам нужно сравнить пароль в базе данных с одним, что пользователь вошел, использовать запрос, как этот

SELECT * FROM `mailserver`.`virtual_users` 
WHERE `email` = '<the email address entered by the user>' 
    AND `password` = ENCRYPT('<the password entered by the user>', `password`);