2016-12-16 59 views
0

有人會贊同使用這個「綠色喇叭」嗎?目前正在從事這個項目。現在這裏的想法是從數據庫中檢索密碼,並將其與用戶輸入的密碼進行匹配。存儲的密碼使用Bcrypt加密。我現在嘗試了不同的方式,但是我仍然無法獲得匹配的密碼。無法獲取存儲的密碼(Bcrypt)以與用戶輸入相匹配

下面是代碼的一部分。

// String command used from SQL, match AccountNo with Accountbox, Password with Passwordbox, from the Accounts dbo. 
string a = string.Format("Select * from Accounts where AccountNo='{0}' and Password='{1}'", Accountbox ,Passwordbox); 

SqlCommand ACCcheck = new SqlCommand(a, conn); 
conn.Open(); 

SqlDataAdapter adapt1 = new SqlDataAdapter(ACCcheck); 
DataSet data1 = new DataSet();    
adapt1.Fill(data1); 

SqlDataReader read = ACCcheck.ExecuteReader(); 

try 
{ 
    if (read.Read()) 
    { 
     string salt = BCryptHelper.GenerateSalt(10); 
     string hash = BCryptHelper.HashPassword(Passwordbox, salt); 
     string OGpassword = read["Password"].ToString(); 
     string givenPass = BCryptHelper.HashPassword(hash, Passwordbox); 

     if (givenPass.Equals(OGpassword)) 
     { 
      //if (read.HasRows) // if input data valid, then proceed. if not then close conn and force retry. 
      //{ 
      MessageBox.Show("WORDKING!"); 
      conn.Close(); 
      read.Close(); 

      string q = string.Format("Select * from Transactions where AccountNo =" + Accountbox); // Fetch data from transaction table 

      SqlCommand cmd = new SqlCommand(q, conn); // SQL query, checks if what the user has written is a match with whats on the Db. Accountbox and Passwordbox are Inputbox I've used for this program. 

我不知道如果我有一個SQL的錯誤在這裏,或者如果它是Bcrypt一部分是壞了。

在此先感謝您的幫助。

回答

1

那不是,如果你使用bcrypt例如,如果我使用相同字符串得到hash將返回不同hash即使string是相同

string str = "asdf"; 
     string pass = BCrypt.Net.BCrypt.HashPassword(str, 10); 
     string pass2 = BCrypt.Net.BCrypt.HashPassword(str, 10); 

     bool a = pass == pass2; 

一個將永遠是假的,你如何匹配來自數據庫的密碼,因爲bcrypt沒有這樣的工作,而不是來驗證你必須用自己的方法密碼Verify

BCrypt.Net.BCrypt.Verify(str, pass); 
現在

它將返回true這裏str是您將從txtbox獲得的密碼字符串,pass是存儲在數據庫中的hashed password

0

當你加密首次密碼,您需要將儲存在你的表中的加密密碼一起。 解密密碼時,應使用與加密相同的鹽。

如果保存鹽在你的表,那麼你應該從你的SELECT語句刪除和密碼=「{1}」條件也和檢索用戶帳戶記錄後檢查密碼。

相關問題