2016-11-19 1 views
0

Ich habe eine Homepage mit einem Login mit $ hash = password_hash ($ accountpassword, PASSWORD_DEFAULT) ;. mySQl Login mit C#

Das Passwort wird als Hash gespeichert, der mit $ 2y $ beginnt.

Dann habe ich den Login in C#:

//crypting the PW that user enter 
     string cryptedPassword = Crypter.Blowfish.Crypt(textBox_password.Text); 


     string user = textBox_username.Text; 
     string pass = cryptedPassword; 
     if (user == "" || pass == "") 
     { 
      MessageBox.Show("Empty Fields Detected ! Please fill up all the fields"); 
      return; 
     } 
     bool r = validate_login(user, pass); 
     if (r) 
      MessageBox.Show("Correct Login Credentials"); 
     else 
      MessageBox.Show("Incorrect Login Credentials"+cryptedPassword); 

meine Validate-Methode:

private bool validate_login(string user, string pass) 
    { 
     db_connection(); 
     MySqlCommand cmd = new MySqlCommand(); 
     cmd.CommandText = "Select * from users where [email protected] and [email protected]"; 
     cmd.Parameters.AddWithValue("@user", user); 
     cmd.Parameters.AddWithValue("@pass", pass); 
     cmd.Connection = connect; 
     MySqlDataReader login = cmd.ExecuteReader(); 
     if (login.Read()) 
     { 
      connect.Close(); 
      return true; 
     } 
     else 
     { 
      connect.Close(); 
      return false; 
     } 
    } 

bei Crypter.Blowfish.Crypt (textBox_password.Text) ist worng. Ich werde ein Hash beginnt mit $ 2a $

kann jemand helfen, dieses Problem zu beheben?

Antwort

1

Wenn Sie die Methode Crypter.Blowfish.Crypt verwenden, müssen Sie einen zweiten Parameter salt angeben. Wenn einer nicht angegeben ist, wird ein zufälliger für Sie generiert. Offensichtlich werden Sie bei nachfolgenden Aufrufen andere zufällige Werte erhalten.

Alternativly könnten Sie die Crypter Bibliothek bekommen das Passwort gegen die Raute zu überprüfen:

if (Crypter.CheckPassword(password, cryptedPassword)) { 
    // Valid password code here 
    return true; 
} else { 
    // Invalid password code here 
    return false; 
} 

Sie werden natürlich müssen das verschlüsselte Passwort aus der db lesen, aber ich glaube, diese Methode bedeutet, dass Sie don‘ t muss ein Salz für den Passwort-Hash bereitstellen/speichern.

HTH

+0

hmm das PHP-Skript ist nicht meine Arbeit. Wie kann ich den 2. Parameter herausfinden? – Andreas

+0

Verwenden Sie etwas wie 'Crypter.Blowfish.GenerateSalt (6)' und speichern Sie diesen Wert, oder verwenden Sie eine Zeichenfolge Ihrer Wahl (weniger sicher). Ich habe meine Antwort aktualisiert, um eine alternative Methode hinzuzufügen, die es Ihnen ermöglichen sollte, die Überprüfung durchzuführen, ohne das Salz zu lagern. – Graeme