0

重複の可能性:パスワードのハッシュ
化とパスワードの暗号化の違い ハッシュ化と
パスワードの暗号化

ユーザー名をソルト値として渡すことにより、Rfc2898DeriveBytesを使用してC#でパスワードをハッシュしようとしました。

public string HashPassword(string HashedUsernameSalt, string Password)

{

    Rfc2898DeriveBytes HashedPass = new Rfc2898DeriveBytes(Password,
    System.Text.Encoding.Default.GetBytes(HashedUsernameSalt), 10000);
    return Convert.ToBase64String(Hasher.GetBytes(25));
}

上記の方法により、ハッシュ値が得られます。私の質問は

ユーザーがパスワードを忘れた場合に表示するために、パスワードを元に戻すことはできますか? または、ここで暗号化や復号化などの他の概念を実装する必要がありますか? しかし、ハッシュは暗号化よりも優れていると聞きました。

ありがとう!

4

3 に答える 3

7

パスワードには必ず一方向ハッシュを使用する必要があります。あなたの目標は、ユーザーが忘れた場合にそれを取得できるようにすることではありません。やるべきことは、ユーザーが自分のパスワードを (ある種の識別プロセスを経た後に) 完全に新しいパスワードにリセットできるようにすることです。

于 2013-01-24T19:26:09.560 に答える
4

ハッシュを逆にすることはできないため、ユーザーがパスワードを忘れた場合は「回復不能」になります。暗号化されたパスワードをデータベースに保存するのではなく、それらのハッシュを保存する必要があります。ユーザーがパスワードを忘れた場合、新しい一時的で安全なパスワードを生成します (ユーザーが本人であることを適切に識別した後)。

パスワードはソルトでハッシュする必要があります。そうしないと、レインボー テーブルによってすぐに破られてしまいます。

于 2013-01-24T19:26:56.867 に答える
0

セキュリティの観点からは、パスワードを暗号化する代わりにハッシュする方が確かに優れています。パスワードを暗号化するために使用するキーを管理する必要があり、安全に保管しないと (これはおそらく断固たる攻撃者に対抗することになります)、攻撃者はすべてのユーザー パスワードを平文で取得できます。

パスワードを忘れた場合の仕組みを提供したい場合は、登録されているアドレスに電子メールを送信し、ユーザーに新しいパスワードを作成させることをお勧めします。または、セキュリティの質問を実装します。または両方を行います。

于 2013-01-24T19:27:22.047 に答える