2016-04-26 11 views
0

私はWeb部分に2つの部分、Web部分とJava部分で構成されたプロジェクトを持っています。私はとsymfonyを使用しています。データベース。 FOSUserBundleは、パスワードを暗号化するためにスレーブ化されたSHA1を使用しています。私はJavaアプリケーションで認証したいと思いますが、symfonyでどのようにしてmecanismeが動作するのか分かりませんでした。我々がここで見ることができるように塩「はランダムである場合、私は、ここでは2つの質問を持っている塩は、乱数mt_rand()、 を使用して生成され、Symfony FOSUserBundleはどのように塩を格納します

$this->salt = base_convert(sha1(uniqid(mt_rand(), true)), 16, 36); 

: は[Model/User.php][1]クラスでは、コンストラクタで、ラインがあります"、ログインプロセスでは、それをデータベースと比較するために新しい塩がどのように生成されますか? と塩はどこかに保管されていますか?

+0

ハッシュ値と共にデータベースに格納されます。 – zerkms

+0

別の列に格納されていない場合、どのように取得されますか? –

+1

データベースをチェックしようとしましたか?おそらくコードですか? – zerkms

答えて

1

すべてのフィールドを格納しているデータベースがFOSUserBundleを正しく参照していることを確認してください。親と子のコンストラクタを適切に定義していないため、パスワードが与えられているだけの空の塩であるため、塩が適用されたときに異なるハッシュ文字列が使われている理由があります。

簡単な例:

$encoder_service = $this->get('security.encoder_factory'); 
$encoder = $encoder_service->getEncoder($user); 

$currentpass = $user->getPassword(); 
$newpass = $encoder->encodePassword($newPassword, $user->getSalt()); 

は、その後、あなたが2に比較することができ、ユーザと塩新しいパスワードから現在のハッシュされたパスワードを取得します。

は、ユーザからの塩を取得パースされたパスワードが保存されているパスワードと同じであることを確認するためにハッシュします

if (strcmp($currentpass, $newpass) == 0) { 
     // if two passwords are the same, do something here 
} else { 
     throw $this->createNotFoundException('Error here'); 
} 
+0

'strcmp($ currentpass、$ newpass)' - '\ Symfony \ Component \ Security \ Core \ Util \ StringUtils :: equals()'を使用する必要があります一定時間内にハッシュを比較する。 – zerkms

+0

はい私はOPのための簡単な例をノックしたので、私はあなたの意見に同意しなかったことに同意します。 – Brendan

関連する問題