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

Дата оновлення перекладу 2023-06-22

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

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 символів або менше. Прочитайте більше деталей про це: Як реалізувати просту форму реєстрації .