PostFix + MySQL Encrypt (), как он проверяет пароль с рандовой солью?

StackOverflow https://stackoverflow.com/questions/4620742

Вопрос

Я реализовал мой почтовый сервер как продиктованный здесь.

Это отлично работает. Мой любопытность вращается вокруг ввода пользователей в базу данных и аутентификация их

Бег:

INSERT INTO users (email, password) VALUES ('sales@example.com', ENCRYPT('password'));

Несколько раз даст другое хеш для зашифрованного пароля, как его использование случайной соли. Т.е. если я введу продажи@example.com три раза с одним и тем же паролем, каждая хеш отличается ...

Мой вопрос к этому, как он, как это, чтобы сервер PostFix может фактически аутентифицировать пароль, когда пользователь входит в систему через почтовый клиент?

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

Это было полезно?

Решение

Читайте человека Crypt: он возвращает соль в первых двух символах возвращаемого значения.

Таким образом, соль не потеряна, вы можете сравнить зашифрованную строку к результату Crypt («Pass», $ first_two_chars_of_encrypted_value).

Другие советы

PostFix сравнивает пароль из базы данных к новой шифровании, выполненной солью (пароль из БД).

шифровать:

update user set password = ENCRYPT('1234') where id = 1

Чтобы проверить пароль:

SELECT u.* FROM user u where u.email ='admin@dominio.com' 
and ENCRYPT('1234', u.password) = u.password

Вы должны использовать шифрование («Pass», «соль»), чтобы заставить соль, в противном случае соль теряется навсегда, и у вас нет способа восстановления его. Довольно бессмысленная функция без нее. Это ужасная функция для использования, однако, потому что безопасность настолько минимальна; Вместо этого используйте пароль () или Old_Password ().

Encrypt () использует System Crypt (), которая может использовать все или только первые 8 символов, должна быть напечатана 7-битный ASCII, обычно использует 1 раунд хэш-хеха и полностью не подходит. Избегай это.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top