私が使用するたびに:
BCrypt.HashPassword(password, 12)
それは私に異なる出力を与えます。私が読んだことから、ログインの詳細を確認するには、パスワード自体が必要です。
BCrypt.Verify(expectedPassword , hashed);
だから私は混乱しています:パスワード自体ではなく、ハッシュのみをDBに保持する必要があると考えました。何が欠けていますか?
私が使用するたびに:
BCrypt.HashPassword(password, 12)
それは私に異なる出力を与えます。私が読んだことから、ログインの詳細を確認するには、パスワード自体が必要です。
BCrypt.Verify(expectedPassword , hashed);
だから私は混乱しています:パスワード自体ではなく、ハッシュのみをDBに保持する必要があると考えました。何が欠けていますか?
次のように述べた場合、あなたは 100% 正しいと言えます。
パスワード自体ではなく、ハッシュのみをDBに保持する必要があると考えました。
オンライン チャットで、お問い合わせいただいた問題を明確にしましたが、一般的なプロセスは次のとおりです。
後で...
注意すべき重要なことは、特定のハッシュ アルゴリズムでは、2 つの同一の文字列が常に同一の値にハッシュされるため、この比較は安全であるということです。
パスワードがまだメモリ内にある場合は、パスワードをプレーンテキストにすることを許可するのが標準です。理論的には、サーバーに到達する前に暗号化することは可能です (たとえば、パスワードが送信される前にパスワードをハッシュするために JavaScript で記述された SHA-512 手順が存在しても驚かないでしょう)。最も複雑なセキュリティ要件。
コード内
BCrypt.Verify(expectedPassword、ハッシュ);
「expectedPassword」という名前を使用していますが、それは誤解を示しているのでしょうか。これは、ユーザーが入力することを期待するパスワードではありません。これは、ログインに使用しようとしている平文のパスワードです。
2 番目のパラメーター hashed は、「公式」パスワード (つまり、登録に使用したパスワード) のハッシュ値です。
したがって、「ハッシュ」はデータベースに保存されます。「expectedPassword」は、ログインするために入力したばかりのパスワードです。あなたはそれを保存しません。