私はC#を初めて使っています。これは私の最初の質問ですので、あらかじめ偽の謝罪についてお詫び申し上げます。塩漬けされたハッシュを検証する
コンテキスト:私はCreateSaltedHash()メソッドを呼び出し、それをユーザに渡すユーザレジスタは、テキストフィールドからパスワードを入力
。このメソッドは、ユーザーテーブルの[パスワード]列にパスワードを保存する前に、パスワードをハッシュしてハッシュします。
質問:
ユーザーがログインしようとしたとき、私はパスワードを検証する必要がありますどのように?
私がCreateSaltedHash()メソッドをもう一度呼び出すと、ランダムな塩のために一致しません。
塩を別のカラムに保存する必要がありますか?塩漬けされたハッシュを生成するときにデリミタを使用する必要がありますか?塩漬けされハッシュされたパスワードに対して入力パスワードを検証する最も安全な方法は何ですか?
コード: これまで私がこれまで行ってきたことです。
public class PasswordHash
{
public const int SALT_BYTES = 32;
/*
* Method to create a salted hash
*/
public static byte[] CreateSaltedHash(string password)
{
RNGCryptoServiceProvider randromNumberGenerator = new RNGCryptoServiceProvider();
byte[] salt = new byte[SALT_BYTES];
randromNumberGenerator.GetBytes(salt);
HashAlgorithm hashAlgorithm = new SHA256Managed();
byte[] passwordByteArray = Encoding.UTF8.GetBytes(password);
byte[] passwordAndSalt = new byte[passwordByteArray.Length + SALT_BYTES];
for (int i = 0; i < passwordByteArray.Length; i++)
{
passwordAndSalt[i] = passwordByteArray[i];
}
for (int i = 0; i < salt.Length; i++)
{
passwordAndSalt[passwordByteArray.Length + i] = salt[i];
}
return hashAlgorithm.ComputeHash(passwordAndSalt);
}
public static bool OkPassword(string password)
{
//This is where I want to validate the password before logging in.
}
}
登録クラスのメソッドを呼び出します。
User user= new User();
user.password = PasswordHash.CreateSaltedHash(TextBoxUserPassword.Text);
「別の列に塩類を保存すべきか」 - はい。それを参照してください。 – TheGeekZn
あなたの保有方法に重大な問題があることを理解していますか?あなたは本当にあなたの現在の選択肢が良い選択ではないパスワードを確保するためにハッシュアルゴリズムの設計を使用する必要があります。 –
あなたのタイトルを編集しました。 「[質問には「タイトル内に「タグ」を含める必要がありますか」(http://meta.stackexchange.com/questions/19190/)」を参照してください。コンセンサスは「いいえ、そうすべきではありません」です。 –