Symfony имеет несколько различных способов хранения паролей. Логика хеширования и проверки пароля хранится в нескольких классах "кодировщика" :
Какой из них используется можно настроить в security.yml , под ключом encoder
. Если это говорит sha512
, вы используете MessageDigestPasswordEncoder
.
Тип кодера может быть разным для разных типов пользователей. Чтобы получить правильный кодировщик для пользователя, вы можете задать EncoderFactory . Это уже сделано для вас в UserPasswordEncoder : вы передаете пользователя и простой пароль в UserPasswordEncoder->isPasswordValid
, и он проверяет пароль с правильным кодером, принадлежащим этому пользователю. Это самый простой интерфейс для проверки пароля пользователя.
Если вы действительно хотите знать, как работает хеширование SHA512, вы можете проверить MessageDigestPasswordEncoder . объединяет соль и пароль в строку типа "пароль {соль}". Он вычисляет хэш этой строки 5000 раз . Это сделано для того, чтобы сделать хеш паролей медленным, поэтому перебор не так прост.
При проверке действительности пароля использует hash_equals
. Это сравнение с постоянным временем, которое предотвращает временные атаки на хэш пароля.