Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Endy
Člen
Avatar
Endy:1.12.2016 1:51

Ahoj řeším teď jeden problém chci do svého systému udělat přihlašování pomocí wcf service + windows form aplikace oba projekty bez problému zkompiluju ale někde je chyba zde je kod
Wcf service

public string Login(Uzivatel u)
      {
          try
          {
              comm.CommandText = "Select count (*) from uzivatel where Username=@username AND password=@Password";
              comm.Parameters.AddWithValue("username", u.Username);
              comm.Parameters.AddWithValue("Password", u.Pasword);
              comm.CommandType = CommandType.Text;

              conn.Open();

              DataTable data = new DataTable();
              SqlDataAdapter adapter = new SqlDataAdapter(comm);
              adapter.Fill(data);

              string hodnota;

              hodnota = data.Rows[0][0].ToString();

              return hodnota;





          }
          catch (Exception)
          {
              throw;
          }
          finally
          {
              if (conn != null)
              {
                  conn.Close();
              }
          }







      }

Winform:

private void button1_Click(object sender, EventArgs e)
       {
           Uzivatel u = new Uzivatel();
           u.Username=Convert.ToString(usernametxt.Text);
           u.Pasword = Convert.ToString(passwordtxt.Text);
           Service1Client service = new Service1Client();

           if (service.Login(u).ToString()== "1")
           {
               this.Hide();
               Form1 main = new Form1();
               main.Show();
           }

           else
           {
               label3.Text = "Chyba zadejte znovu heslo";
           }
       }
 
Odpovědět
1.12.2016 1:51
Avatar
Odpovídá na Endy
Michal Štěpánek:1.12.2016 8:36
  1. Ty máš to heslo v DB takto v surové podobě? Když jsem přihlašování páchal já, poslal jsem do procedury jméno a heslo (ne objekt uživatel), heslo jsem za hashoval a pak kontroloval jestli se shoduje s otiskem hesla v DB...
  2. Proč v tom dotazu na existenci uživatele tvoříš DataTable?
Editováno 1.12.2016 8:36
Nahoru Odpovědět
1.12.2016 8:36
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
Erik Šťastný:1.12.2016 8:44

Třeba už to heslo zahashované je :) v mé aplikaci vypadá kód podobně, ale ve skutečnosti je heslo v celé době už jen hash hesla

 
Nahoru Odpovědět
1.12.2016 8:44
Avatar
Odpovídá na Erik Šťastný
Michal Štěpánek:1.12.2016 8:53

když jsem viděl toto

...
Uzivatel u = new Uzivatel();
           u.Username=Convert.ToString(usernametxt.Text);
           u.Pasword = Convert.ToString(passwordtxt.Text);
           Service1Client service = new Service1Client();
...

nabyl jsem dojmu, že to jsou údaje z přihlašovacího formuláře...

Nahoru Odpovědět
1.12.2016 8:53
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
Erik Šťastný:1.12.2016 8:56

Hmmm... ano nejspíš máš pravdu :)

 
Nahoru Odpovědět
1.12.2016 8:56
Avatar
Endy
Člen
Avatar
Endy:1.12.2016 13:20

Díky za odpovědi Ano to heslo mám opravdu takto v tvrdé podobě (moje první tvorba přihlášení) Nicméně už se mi toto podařilo rozjet. Neposlal by někdo z vás jak by jste to řešili obdobně ale pomocí toho zaheshovani ? díky

 
Nahoru Odpovědět
1.12.2016 13:20
Avatar
Odpovídá na Endy
Erik Šťastný:1.12.2016 13:33

Jde jen o to, že heslo proženeš hashovací funkcí.

Tzn, že kdokoliv by ho v databázi viděl tak nemá ponětí jaké je uživatelovo heslo, ani ty ne, ale to ti nevadí můžeš porovnávat jen uložený Hash a Hash od uživatele ani nemusíš znát jeho heslo :)

Já u sebe v aplikaci používám: Ale to jen protože jsem fanda hexa formátu :D

private string GetSha256(string Password)
{
    var pass = Encoding.ASCII.GetBytes(Password);
    SHA256Managed hashString = new SHA256Managed();
    string HashedPassword = "";

    var hashValue = hashString.ComputeHash(pass);
    foreach (byte x in hashValue)
    {
        HashedPassword += string.Format("{0:x2}", x);
    }
    return HashedPassword;
}
Editováno 1.12.2016 13:34
 
Nahoru Odpovědět
1.12.2016 13:33
Avatar
Odpovídá na Endy
Michal Štěpánek:2.12.2016 8:11

já přidávám jako "sůl" k heslu i login...

public string HashHesla(string login, string heslo)
        {
            string SourceText = login + heslo;
            Byte[] a = Encoding.UTF8.GetBytes(SourceText);
            Byte[] b;
            SHA512Managed c = new SHA512Managed();
            b = c.ComputeHash(a);
            string HashText = Convert.ToBase64String(b);
            return HashText;
        }
Nahoru Odpovědět
2.12.2016 8:11
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.