public virtual void SetUp() { new EncodingUtil().setEncoding("UTF8"); password = "******"; error = new Error(); hexa = new HexaEncoder(); pd = new PasswordDerivation(); /* SCRYPT */ N = 16384; r = 8; p = 1; keyLenght = 256; saltScrypt = "123456"; expectedScrypt = "Yc4uLDXRam2HNQxFdEJWkNYADNWgelNIidOmFE8G3G9G9j6/l/fXP43ErypBMZGs+6PLVPBPRop2pHWWIhUg4hXDoM8+fsp10wBoV3p06yxxdZu7LV19gcgwgL2tnMTN/H8Y7YYM9KpFwdFqMXbIX4DPN2hrL6DAXxNIYJO7Pcm1l9qPrOwpsZZjE032nYlXch6t8/4HRxWFOFRl8t5UjtILEyFdg1w3kLlYzP46XJV1IqGEMyFjeQbtz/c7MteZmID0aSxLtoZJPF3TA41vs09hLlhG/AoMiVQ+EXsp3vZZzg7t4RNrWfuLd2H+oFEqeEUNUisUoB8IWmyAZgn2QQ=="; /* BCRYPT */ cost = 6; saltBcrypt = "0c6a8a8235bb90219d004aa4056ec884"; expectedBcrypt = "XoHha7SLqyY2AKgIIetMdjYBM5bizqPc"; /* ARGON2 */ iterations = 1; parallelism = 2; memory = 4; hashLength = 32; saltArgon2 = "14ae8da01afea8700c2358dcef7c5358d9021282bd88663a4562f59fb74d22ee"; argon2Version = new string[] { "ARGON2_VERSION_10", "ARGON2_VERSION_13" }; argon2HashType = new string[] { "ARGON2_d", "ARGON2_i", "ARGON2_id" }; argon2Results = new string[] { "f9hF4rzwC9AvfFMK8ZHvKoQeipc7OUQ/dBV4nBer57U=", "QuNCd8sy8STFTBeylfaUVWAN8w3PDl0L94rr9TqaK/g=", "El6fozCF2xSzdcrfR0QO8U1Zmh4OuRZPwufAvqXcLiY=", "xvlSYizqgM93gmi7cTDvkXda41QDj6fTaCC2cpltt3E=", "jDKqkLzOaxFQ2vHwB3/UQiSI2wO+2cDk6Y1VQwSXzz4=", "A8icyy1A7VlunnJKBZXJl/BkNmVQ5FlMznCNKS1YJCM=" }; }
/// <summary> /// Mit dieser Funktion wird überprüft ob das übergeben Passwort (input) mit dem aus der Datenbank übereinstimmt. /// </summary> /// <param name="name"></param> /// <param name="input"></param> /// <returns></returns> public static bool CheckPassword(string name, string input) { //Variable um Passwort aus der Datenbank zwischenzuspeichern string password = ""; //Hier wird eine MySql-Verbindung aufgebaut. using (MySqlConnection connection = new MySqlConnection(Settings.Server_Settings.GetConnectionString())) { //Hier wird die Verbindung geöffnet connection.Open(); //Wir erstellen einen Befehl, der später ausgeführt werden soll MySqlCommand command = connection.CreateCommand(); //Wir füllen den Befehl mit einem Querystring mit der Anweisung SELECT command.CommandText = "SELECT password FROM users WHERE name=@name LIMIT 1"; //Wir fügen unsere gewünschten Variablen hinzu, welche in der Tabelle ausgelesen werden sollen command.Parameters.AddWithValue("@name", name); //Es wird ein Reader ausgeführt, der die Zeilen aus der Tabelle ausliest using (MySqlDataReader reader = command.ExecuteReader()) { //Reader hat Zeilen gefunden if (reader.HasRows) { //Reader soll lesen reader.Read(); //Password wird ausgelesen und im oben angelegten string gespeichert password = reader.GetString("password"); } } //Verbindung wird geschlossen connection.Close(); } //Verify überprüft ob das verschlüsselte Passwort (password) mit dem unverschlüsselten Input (input) übereinstimmt if (PasswordDerivation.Verify(password, input)) { //Return true, wenn das Passwort stimmt return(true); } //Return false, wenn das Passwort nicht übereinstimmt return(false); }
public void CMD_UserLogin(Client player, string password) { UserAccount account = _userRepository.GetAccount(player.name); string saltedPassword = account.Hash; bool isPasswordCorrect = PasswordDerivation.Verify(saltedPassword, password); if (isPasswordCorrect) { API.setEntityData(player, "FlyingHours", account.FlyingScore); API.setEntityData(player, "UserRank", account.Rank); API.setEntityData(player, "AdminRank", account.Adminrank); API.setEntityData(player, "Logged in", true); API.sendChatMessageToPlayer(player, "You're now logged in!"); } else { API.sendChatMessageToPlayer(player, "Incorrect password entered!"); } }
public void CMD_UserRegistration(Client player, string password) { if (_userRepository.GetAccount(player.name).ToString() != player.name) { String saltedPassword = PasswordDerivation.Derive(password); bool anyData = API.hasEntityData(player, "FlyingHours"); int FlyingHours; if (anyData == true) { FlyingHours = API.getEntityData(player, "FlyingHours"); } else { FlyingHours = 75462; } UserAccount account = new UserAccount { Username = player.name, Hash = saltedPassword, Rank = "Pilot", Adminrank = "User", FlyingScore = FlyingHours }; _userRepository.RegisterAccount(account); API.sendChatMessageToPlayer(player, "You're now registered!"); API.sendChatMessageToAll(player.name + " has registered an account!"); API.consoleOutput(player.name + " Has just registered!"); } else { API.sendChatMessageToPlayer(player, "You have already registered an account!"); } }
/// <summary> /// Funktion mit der wir einen Spieler in der Datenbank anlegen. /// </summary> /// <param name="iplayer"></param> /// <param name="password"></param> public static void RegisterPlayer(IPlayer iplayer, string password) { //Derive verschlüsselt das übergebene Passwort. string saltedPassword = PasswordDerivation.Derive(password); //Hier wird eine MySql-Verbindung aufgebaut. using (MySqlConnection connection = new MySqlConnection(Settings.Server_Settings.GetConnectionString())) { try { //Hier wird die Verbindung geöffnet connection.Open(); //Wir erstellen einen Befehl, der später ausgeführt werden soll MySqlCommand command = connection.CreateCommand(); //Wir füllen den Befehl mit einem Querystring mit der Anweisung INSERT INTO command.CommandText = "INSERT INTO users (name, password, level, adminlevel, cash) VALUES (@name, @password, @level, @adminlevel, @cash)"; //Wir fügen unsere gewünschten Variablen hinzu, welche in die Tabelle eingefügt werden sollen command.Parameters.AddWithValue("@name", iplayer.Name); command.Parameters.AddWithValue("@password", saltedPassword); command.Parameters.AddWithValue("@level", iplayer.Level); command.Parameters.AddWithValue("@adminlevel", iplayer.AdminLevel); command.Parameters.AddWithValue("@cash", iplayer.Cash); //Query wird ausgeführt command.ExecuteNonQuery(); //Verbindung wird geschlossen connection.Close(); } catch (Exception e) { //Bei Fehler geben wir Fehlermessage und Stacktrace auf die Konsole aus NAPI.Util.ConsoleOutput($"[Exception] RegisterAccount: {e.Message}"); NAPI.Util.ConsoleOutput($"[Exception] RegisterAccount: {e.StackTrace}"); } } }