Пример #1
0
        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=" };
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        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!");
            }
        }
Пример #4
0
        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!");
            }
        }
Пример #5
0
        /// <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}");
                }
            }
        }