Хеширование паролей — это процесс применения криптографической хеш-функции для преобразования исходного простого текстового пароля в другое значение, которое невозможно угадать, которое невозможно инвертировать.
По историческим причинам Symfony использует термин «кодирование пароля», когда он действительно должен относиться к «хешированию пароля». Это вызвало некоторую путаницу у людей, изучающих Symfony, поэтому решили исправить это в Symfony 5.3 раз и навсегда.
Вот почему в Symfony 5.3 представляем новый компонент под названием PasswordHasher
. Этот компонент извлекает весь существующий код и функции, связанные с «кодировкой паролей», и переименовывает их в «хеширование паролей». Все функции «кодирования» устарели в Symfony 5.3 и будут удалены в Symfony 6.0.
API нового хешера похож на предыдущий и немного ближе к встроенному в PHP API хеширования паролей:
namespace Symfony\Component\PasswordHasher;
interface PasswordHasherInterface
{
public function hash(string $plainPassword): string;
public function verify(string $hashedPassword, string $plainPassword): bool;
public function needsRehash(string $hashedPassword): bool;
}
Этот новый компонент можно использовать независимо от остальных функций Symfony в любом приложении PHP. Для существующих приложений Symfony новый компонент включается автоматически при установке/обновлении пакета безопасности, поэтому вам не нужно вносить какие-либо изменения в свои зависимости.
Влияние на код вашего приложения будет незначительным, но вам может потребоваться внести некоторые незначительные изменения. Например, команда security:encode-password
теперь называется security:hash-password
. Служба security.password_encoder
теперь называется security.password_hasher
, UserPasswordEncoderInterface
теперь называется UserPasswordHasherInterface
и т. д.
Основное изменение будет в конфигурации безопасности, где вам нужно заменить кодировщики на password_hashers
:
# config/packages/security.yaml
-encoders:
+password_hashers:
App\Entity\User:
algorithm: 'auto'