Jump to content
Unity Insider Forum

BCrypt Login


Shalafi

Recommended Posts

Hi,

Ich bastle an einem kleinen Login-System auf Basis von TcpClient und TcpServer.


Bei der Registrierung wird ein Salt und das mit BCrypt gehashtes Passwort in die Datenbank gespeichert.

Meine Encryption-Klasse seiht so aus:

public class Encryption
    {
        public static string PasswordSalt(int length = 6)
        {
            string salt = BCrypt.Net.BCrypt.GenerateSalt(12);
            salt = salt.Substring(0, length);
            return salt;
        }
        public static string HashPassword(string password, string salt)
        {
            try
            {
                string hash = BCrypt.Net.BCrypt.HashPassword(password, salt);
                return hash;
            }
            catch (Exception e)
            {
                return (string)null;
            }
        }

        public static bool ValidatePassword(string password, string salt, string correcthash)
        {
            try
            { 
                return BCrypt.Net.BCrypt.Verify(password, correcthash);
            }
            catch
            {
                return false;
            }
        }
    }

Das Problem ist, dass die ValidatePassword-Methode immer False zurück gibt. Wenn ich das gleiche Password durch die HashPassword-Methode schickt, kommt immer ein anderer Hash raus.

 

Wo liegt mein Denkfehler? 

 

 

Ist es üblich, dass Passwort erst am Server zu hashen, oder sollte das der Client schon machen? Der kennt ja eigendlich den Salt aus der Datenbank nicht.

 Kann man die Kommunikation zwischen Client und Server irgendwie per SSL oder so schützen? Brauch ich dafür ein eigenens Zertifikat?

 


Gruß

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 2 Stunden schrieb Shalafi:

Ist es üblich, dass Passwort erst am Server zu hashen

Ja.

vor 2 Stunden schrieb Shalafi:

Kann man die Kommunikation zwischen Client und Server irgendwie per SSL oder so schützen?

Ja, einfach https benutzen.

vor 2 Stunden schrieb Shalafi:

Brauch ich dafür ein eigenens Zertifikat?

Ja, kann dein Hoster dir üblicherweise einrichten. Kostet aber was. Manchmal gibt's auch ein Zertifikat im Preis inbegriffen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

danke für die Antworten.

Vielleicht hab ich mich falsch ausgedrückt. Es handelt sich nicht um eine HTTP-Anwendung. Die Kommunikation findet über TcpClient und TcpServer statt. Wie kann ich die Kommunikation am besten schützen, wenn ein Passwort übermittelt wird?

 

Zu meinem BCrypt Problem: Irgendwie lieftert die HashPassword für das gleiche Password immer unterschiedliche Hashes. Deshalb funktioniert der Login nicht. Kann mir jemand sagen was ich falsch mache?


Gruß

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 10 Stunden schrieb Shalafi:

Vielleicht hab ich mich falsch ausgedrückt. Es handelt sich nicht um eine HTTP-Anwendung. Die Kommunikation findet über TcpClient und TcpServer statt. Wie kann ich die Kommunikation am besten schützen, wenn ein Passwort übermittelt wird?

Das hab ich schon mitgekriegt, ist aber irgendwie Quatsch. Man muss ja das Rad nicht unbedingt neu erfinden. Das ist, als ob du dir ne Suppe auffüllen willst und dafür erstmal eine Suppenkelle schmieden gehst.

vor 10 Stunden schrieb Shalafi:

Irgendwie lieftert die HashPassword für das gleiche Password immer unterschiedliche Hashes.

Ich würde sagen, das liegt daran dass du immer einen neuen Salt generierst.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...