我已經在這裏擱置了好幾個小時了。我一直在嘗試創建一個登錄表單來開發一個簡單的應用程序。c#驗證存儲在SQL數據庫中的散列密碼
我已經成功設法對salt/hash密碼進行加密和創建用戶帳戶,登錄,散列和salt都使用INSERT查詢存儲在SQL數據庫表的不同列中。
我現在需要做的是在登錄頁面輸入來自用戶的密碼,並將其與存儲的鹽值相結合,重組合並的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");
}
}
}
我不知道如何使這個成功發生。我如何獲取存儲密碼salt的SQL列的值,然後將其添加到來自文本框(pwTXT.Text +存儲的pw鹽)的用戶密碼輸入中,以便我可以通過我的散列算法把結果,然後比較值來驗證用戶?
編輯:感謝弗拉德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);
}
}
究竟是什麼不明顯?你已經很準確地描述了算法。你有從數據庫讀取的問題?將閱讀結果與文本框結合起來有問題嗎? –
嘿謝謝你的迴應,我的問題是,我無法弄清楚如何從數據庫中獲取鹽的價值,並將它與文本框中的輸入相結合,就像你提到的那樣。我知道我需要用算法實現的過程,但實際上從數據庫中提取數據對我來說很麻煩。關於我需要做什麼來實現這一點的任何建議? – lostintranslation
請檢查我的答案,看看它是否有幫助。 –