2

ユーザーが入力したパスワードが有効かどうかを比較する必要があります。sha512暗号化を取得するにはどうすればよいですか。プロジェクトでもFOSUserBundleを使用しています。

4

3 に答える 3

10

コントローラで実行できます(で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;
于 2012-03-30T08:59:37.563 に答える
4

symfonyにはパスワードを保存するいくつかの異なる方法があります。パスワードをハッシュしてチェックするロジックは、いくつかの「エンコーダー」クラスに格納されています。

どちらを使用するかは、security.ymlのキーの下で構成できencoderます。これが言う場合sha512、あなたはを使用していMessageDigestPasswordEncoderます。

エンコーダのタイプは、ユーザータイプごとに異なる場合があります。ユーザーに適したエンコーダーを入手するには、EncoderFactoryに問い合わせてください。これは、 UserPasswordEncoderですでに実行されています。ユーザーとプレーンパスワードをに渡し、UserPasswordEncoder->isPasswordValidこのユーザーに属する正しいエンコーダーでパスワードをチェックします。これは、ユーザーのパスワードを確認するための最も簡単なインターフェースです。

SHA512ハッシュがどのように機能するかを本当に知りたい場合は、MessageDigestPasswordEncoderを確認できます。ソルトとパスワードを「password{salt}」のような文字列に結合します。この文字列のハッシュを5000回計算します。これは、パスワードハッシュを遅くするためであり、ブルートフォース攻撃は容易ではありません。

パスワードが有効かどうかを確認するときは、を使用しますhash_equals。これは一定時間の比較であり、パスワードハッシュに対するタイミング攻撃を防ぎます。

于 2017-02-16T10:16:19.780 に答える
1

必要なSHA512であることが確実な場合は、これを試してください。

于 2012-03-30T07:53:53.533 に答える