Как зашифровать пароль вручную

Дата обновления перевода 2023-06-30

Как зашифровать пароль вручную

Note

По историческим причинам, Symfony использует термин "шифрование паролей", в то время, как на самом деле стоит использовать "хеширование паролей". "Кодировщики" на самом деле являются криптографическими хеш-функциями.

Если, к примеру, вы храните пользователей в DB, вам понадобится шифровать пароли пользователей до того, как вставлять их. Независимо от того, какой алгоритм вы сконфигурируете для вашего объекта пользователя, хешированный пароль всегда может быть определён из контроллера следующим образом:

1
2
3
4
5
6
7
8
9
10
11
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;

public function registerAction(UserPasswordEncoderInterface $encoder)
{
    // любой *ваш* объект пользователя
    $user = new AppBundle\Entity\User();
    $plainPassword = 'ryanpass';
    $encoded = $encoder->encodePassword($user, $plainPassword);

    $user->setPassword($encoded);
}

Для того, чтобы это работало, просто убедитесь в том, что у вас есть кодировщик для вашего класса пользователя (например, AppBundle\Entity\User), сконфигурированный под ключом encoders в app/config/security.yml.

Объект $encoder также имеет метод isPasswordValid(), который берёт объект User в качестве первого аргумента и нешифрованный пароль для проверки в качестве второго аргумента.

Caution

Когда вы позволяете пользователю отправлять нешифрованный пароль (например, в регистрационной форме или форме смены пароля), вы должны иметь валидацию, которая гарантирует, что пароль состоит из 4096 символов или меньше. Прочтите больше деталей об этом: Как реализовать простую форму регистрации .