私はこれでかなりの時間がかかりました。私は開発しているシンプルなアプリケーションにログインフォームを作成することを試しています。c#SQLデータベースに格納されているハッシュされたパスワードを検証しています
私はパスワードのsalt/hashを成功裏に管理しました。ユーザーアカウントを作成すると、ログイン、ハッシュ、ソルトはINSERTクエリを使用してSQLデータベーステーブルの別々の列に格納されます。
私が今必要とするのは、ログインページでユーザーからのパスワード入力を受け取り、保存されたsalt値と組み合わせ、結合されたpw + saltを再ハッシュし、保存されたハッシュ値と比較してユーザーを検証します。私はこれを達成しようとするSELECTクエリを使用していますが、これまでのところ成功していません。私はこれが正常に実現する方法がわからないんだけど
///Gather the data from the SQL db, find the username, hash and salt values
string ds = @"Data Source";
using (SqlConnection con = new SqlConnection(ds))
{
///define a set of strings for the query, the login textbox, password textbox and the Hash Gen Algorithm
string query = "SELECT Login, Hash, Salt FROM [Table] WHERE ([email protected], [email protected], [email protected])";
string uname = logTXT.Text;
string passw = pwTXT.Text;
string hash = GenHash(passw, "@salt");
using (SqlCommand cmd = new SqlCommand(query, con))
{
con.Open();
cmd.Parameters.AddWithValue("@Login", uname);
cmd.Parameters.AddWithValue("@Hash", hash);
cmd.Connection = con;
SqlDataReader dr = cmd.ExecuteReader();
if("@Hash" == hash)
{
MessageBox.Show("Login Successful");
}
else
{
MessageBox.Show("Login Failed");
}
}
}
:
は、ここに私のコードです。
私の質問は次のとおりです。パスワード塩を格納するSQL列の値を取得し、それをテキストボックス(pwTXT.Text + stored pw salt)からのユーザーパスワード入力に追加するには、その結果を私のハッシュアルゴリズムに入れて、値を比較してユーザーを検証しますか?
編集:Vlad Stryapkoのおかげで、少し修正されたバージョンを使用して動作させることができ、ハッシュアルゴリズムが正常に実装され、すべて正常に動作しています。 正しい/最も役に立つ答えが彼に行くべきです。
string ds = @"Data Source";
using (SqlConnection con = new SqlConnection(ds))
{
string query = "SELECT Salt FROM [Table] WHERE ([email protected])";
string uname = logTXT.Text;
using (SqlCommand cmd = new SqlCommand(query, con))
{
con.Open();
cmd.Parameters.AddWithValue("@Login", uname);
SqlDataReader dr = cmd.ExecuteReader();
string salt = null;
if (dr.Read())
{
salt = dr.GetString(0);
}
}
正確には何が分かりませんか?あなたはアルゴリズムをかなり正確に記述しました。あなたはDBからの読書に問題がありますか?読んだ結果とテキストボックスを組み合わせる際に問題がありますか? –
お返事ありがとう、私の問題は、DBから保存された塩の値を取得する方法と、これをテキストボックスの入力と組み合わせることができないということです。私はアルゴリズムで達成するために必要なプロセスを知っていますが、実際にはデータベースからデータを引き出すことは私には面倒です。これを達成するために私が何をする必要があるかに関する提案はありますか? – lostintranslation
私の答えが役立つかどうか確認してください。 –