Symfony2: Как мне создать хэш sha512 для пароля? - PullRequest
2 голосов
/ 30 марта 2012

Мне нужно сравнить введенный пользователем пароль, если он действителен или нет.Как мне получить шифрование sha512?Я также использую FOSUserBundle в моем проекте.

Ответы [ 3 ]

10 голосов
/ 30 марта 2012

В вашем контроллере вы можете сделать это (при условии, что вы установили sha512 в качестве алгоритма кодирования в app/config/security.yml)

    $userName = 'username';
    $password = "pass";
    $userManager = $this->get('fos_user.user_manager');
    $user = $userManager->loadUserByUsername($userName);
    $encoder = $this->get('security.encoder_factory')->getEncoder($user);
    $encodedPass = $encoder->encodePassword($password, $user->getSalt());
    echo $user->getPassword() === $encodedPass;
2 голосов
/ 16 февраля 2017

Symfony имеет несколько различных способов хранения паролей. Логика хеширования и проверки пароля хранится в нескольких классах "кодировщика" :

Какой из них используется можно настроить в security.yml , под ключом encoder. Если это говорит sha512, вы используете MessageDigestPasswordEncoder.

Тип кодера может быть разным для разных типов пользователей. Чтобы получить правильный кодировщик для пользователя, вы можете задать EncoderFactory . Это уже сделано для вас в UserPasswordEncoder : вы передаете пользователя и простой пароль в UserPasswordEncoder->isPasswordValid, и он проверяет пароль с правильным кодером, принадлежащим этому пользователю. Это самый простой интерфейс для проверки пароля пользователя.

Если вы действительно хотите знать, как работает хеширование SHA512, вы можете проверить MessageDigestPasswordEncoder . объединяет соль и пароль в строку типа "пароль {соль}". Он вычисляет хэш этой строки 5000 раз . Это сделано для того, чтобы сделать хеш паролей медленным, поэтому перебор не так прост.

При проверке действительности пароля использует hash_equals. Это сравнение с постоянным временем, которое предотвращает временные атаки на хэш пароля.

1 голос
/ 30 марта 2012

Если вы уверены, что вам нужен именно SHA512, попробуйте this .

...