• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dlaczego index jest poza tablicą (Index was outside the bounds of the array)

VPS Starter Arubacloud
0 głosów
235 wizyt
pytanie zadane 12 czerwca 2022 w C# przez Beginner555 Obywatel (1,760 p.)

Cześć,

Robię metodę, która sprawdza czy haszowane hasło i haszowana Nazwa(login) użytkownika występują w bazie danych. Mam problem którego nie rozumiem bo inicjuje tablice string hashLogin i hashPassword które są puste i nie podaje statycznego rozmiaru do nich. Później w pierwszej iteracji pętli while chcę przypisać do hashLogin[i] wartość z bazy danych. Po tej linijce program się przerywa wyrzuca błąd "Index was outside the bounds of the array" i hashLogin[i] = reader.GetString(1);

Za rozjaśnienie mi tego problemu szczere dzięki.

private bool ValidateUser(SiteUser user)
        {
            string myCompanyDBcs = _configuration.GetConnectionString("Sport_ShopContext");
            //IList<SiteUser> helpUser;
        string[] hashLogin = new string[] { }; 
            string[] hashPassword = new string[] { };
            int professionId = 0;    //Id statusu jaki ma użytkownik
            byte[] _salt = new byte[128 / 8];

            SqlConnection con = new SqlConnection(myCompanyDBcs);
            string sql = "SELECT * FROM Users";
            SqlCommand cmd = new SqlCommand(sql, con);
            con.Open();
            SqlDataReader reader = cmd.ExecuteReader();
            int i = 0;
            while (reader.Read())
            {
                hashLogin[i] = reader.GetString(1);
                hashPassword[i] = reader.GetString(2);
                professionId = Int32.Parse(reader["professionId"].ToString());
                _salt = (byte[])reader["salt"];
                i++;
            }
            reader.Close();
            con.Close();


            string userName = Convert.ToBase64String(KeyDerivation.Pbkdf2(
                password: user.userName,
                salt: _salt,
                prf: KeyDerivationPrf.HMACSHA256,
                iterationCount: 1000,
                numBytesRequested: 256 / 8));
            string userPassword = Convert.ToBase64String(KeyDerivation.Pbkdf2(
                password: user.password,
                salt: _salt,
                prf: KeyDerivationPrf.HMACSHA256,
                iterationCount: 1000,
                numBytesRequested: 256 / 8));
            ProfessionId = professionId;
            int loginAmount = i;
            // i = 0;

            for (i = 0; i < loginAmount; i++)
                {
                
                    if ((userName == hashLogin[i]) && (userPassword == hashPassword[i]))
                    {
                        return true;
                    }
                    //else
                    //{

                    //    return false;
                    //}
                
                }
            return false;
        }

 

1 odpowiedź

0 głosów
odpowiedź 12 czerwca 2022 przez adrian17 Ekspert (344,100 p.)
wybrane 12 czerwca 2022 przez Beginner555
 
Najlepsza

inicjuje tablice string hashLogin i hashPassword które są puste

Błąd jest właśnie dlatego, że są puste :) Nie możesz przypisywać używając [i] do tablicy której długość jest 0.

Jak chcesz dynamicznie dodawać wartości do kontenera to zrób `List<string>` i dodawaj do niej wartości z `Add()`.

Natomiast... trochę dziwny jest ten kod? Czemu wyciągasz wszystkich userów i jeden po drugim sprawdzasz czy login i hasło się zgadzają, zamiast wyciągnąć jednego usera z pasującym loginem i sprawdzić samą zgodność hasha hasła?

komentarz 12 czerwca 2022 przez Beginner555 Obywatel (1,760 p.)
Co do tego, że mój kod jest dziwny to się zgodzę, miałem to poprawić jak rozwiążę ten problem z tablicami. Dzięki za podpowiedź z tymi listami.

Podobne pytania

+1 głos
1 odpowiedź 336 wizyt
pytanie zadane 3 grudnia 2021 w C# przez chrystian Gaduła (4,780 p.)
0 głosów
1 odpowiedź 201 wizyt
0 głosów
1 odpowiedź 499 wizyt

92,454 zapytań

141,262 odpowiedzi

319,089 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...