ユーザーが入力したパスワードが有効かどうかを比較する必要があります。sha512暗号化を取得するにはどうすればよいですか。プロジェクトでもFOSUserBundleを使用しています。
3 に答える
コントローラで実行できます(で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;
symfonyにはパスワードを保存するいくつかの異なる方法があります。パスワードをハッシュしてチェックするロジックは、いくつかの「エンコーダー」クラスに格納されています。
どちらを使用するかは、security.ymlのキーの下で構成できencoder
ます。これが言う場合sha512
、あなたはを使用していMessageDigestPasswordEncoder
ます。
エンコーダのタイプは、ユーザータイプごとに異なる場合があります。ユーザーに適したエンコーダーを入手するには、EncoderFactoryに問い合わせてください。これは、 UserPasswordEncoderですでに実行されています。ユーザーとプレーンパスワードをに渡し、UserPasswordEncoder->isPasswordValid
このユーザーに属する正しいエンコーダーでパスワードをチェックします。これは、ユーザーのパスワードを確認するための最も簡単なインターフェースです。
SHA512ハッシュがどのように機能するかを本当に知りたい場合は、MessageDigestPasswordEncoderを確認できます。ソルトとパスワードを「password{salt}」のような文字列に結合します。この文字列のハッシュを5000回計算します。これは、パスワードハッシュを遅くするためであり、ブルートフォース攻撃は容易ではありません。
パスワードが有効かどうかを確認するときは、を使用しますhash_equals
。これは一定時間の比較であり、パスワードハッシュに対するタイミング攻撃を防ぎます。
必要なSHA512であることが確実な場合は、これを試してください。