0

私が使用するたびに:

BCrypt.HashPassword(password, 12)

それは私に異なる出力を与えます。私が読んだことから、ログインの詳細を確認するには、パスワード自体が必要です。

BCrypt.Verify(expectedPassword , hashed);

だから私は混乱しています:パスワード自体ではなく、ハッシュのみをDBに保持する必要があると考えました。何が欠けていますか?

4

2 に答える 2

1

次のように述べた場合、あなたは 100% 正しいと言えます。

パスワード自体ではなく、ハッシュのみをDBに保持する必要があると考えました。

オンライン チャットで、お問い合わせいただいた問題を明確にしましたが、一般的なプロセスは次のとおりです。

  • パスワードを作成 (または変更) するプロセス中に、パスワード (プレーン テキスト) がシステムにプレーン テキストで入力されます。
  • その後、メモリ内でハッシュされます。
  • このハッシュ値はデータベースに保存されます。

後で...

  • ユーザーが認証されることを望む場合、パスワードを入力します。
  • このパスワードはプレーン テキストでシステムに入力されます。
  • その後、メモリ内でハッシュされます。
  • このハッシュ値は、パスワードに保存されている以前のハッシュと比較されます。

注意すべき重要なことは、特定のハッシュ アルゴリズムでは、2 つの同一の文字列が常に同一の値にハッシュされるため、この比較は安全であるということです。

パスワードがまだメモリ内にある場合は、パスワードをプレーンテキストにすることを許可するのが標準です。理論的には、サーバーに到達する前に暗号化することは可能です (たとえば、パスワードが送信される前にパスワードをハッシュするために JavaScript で記述された SHA-512 手順が存在しても驚かないでしょう)。最も複雑なセキュリティ要件。

于 2013-09-02T15:55:46.170 に答える
0

コード内

BCrypt.Verify(expectedPassword、ハッシュ);

「expectedPassword」という名前を使用していますが、それは誤解を示しているのでしょうか。これは、ユーザーが入力することを期待するパスワードではありません。これは、ログインに使用しようとしている平文のパスワードです。

2 番目のパラメーター hashed は、「公式」パスワード (つまり、登録に使用したパスワード) のハッシュ値です。

したがって、「ハッシュ」はデータベースに保存されます。「expectedPassword」は、ログインするために入力したばかりのパスワードです。あなたはそれを保存しません。

于 2013-09-02T13:01:57.643 に答える