Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 17 odgovora
  • 4.602 pregleda

Najnovija ↓

[c#] Username and password(hashing) 04.07.2009. u 10:39 · pre 210 meseci #1
Napravio sam jednostavnu formu koja vrsi validaciju username-a i passworda na formi i proverava da li taj username postoji u bazi, problem mi je u tome sto taj password stoji upisan u tabeli kao obican text sto je veliki sigurnosni problem. Moje pitanje je kako da sakrije(hashujem) tu password kolonu u tabeli.
Code:
private void btnlogin_Click(object sender, EventArgs e)
        {
            using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.Rent_a_carConnectionString))
            {
                conn.Open();
                string cmdstr = String.Format("Select username,password from Users where username ='{0}' and password = '{1}'", txtUser.Text, txtPass.Text);
                using (SqlCommand cmd = new SqlCommand(cmdstr, conn))
                {
                    SqlDataReader dr = cmd.ExecuteReader();
                    while (dr.Read())
                    {
                        if (dr["username"].ToString() == txtUser.Text && dr["password"].ToString() == txtPass.Text)
                        {
                            try
                            {
                                using (Start start = new Start())
                                {
                                    start.ShowDialog();
                                }
                            }
                            catch (Exception ex)
                            {
                                
                                throw new Exception(ex.Message.ToString());
                            }
                            
                        }
                    }
                }
                conn.Close();
            }
        }
Potpis
http://i.imgur.com/V3feW.jpg
http://on.wsj.com/H9yjz6 -- India Graduates Millions, but Too Few Are Fit to Hire
Re: [c#] Username and password(hashing) 05.07.2009. u 11:33 · pre 210 meseci #5
Kao prvo, nemojte koristiti md5, obsolete je i ima veliku collision rupcagu, cak imate i sajtove kojima date hash i on vam nadje collision password ;). Mozda i nije kriticno za ovaj program ovde ali je pitanje dobre prakse koristiti nesto stabilnije, npr SHA-2

Drugo, ne samo da se konekcija zatvara posle dijaloga nego je i taj conn.Close() nepotreban na tom mestu jer ce dispose koji se poziva na kraju using komande uraditi close ako je konekcija otvorena.

I trece, ako vec imas WHERE statement koji ogranicava select samo na korisnicko ime i lozinku onda nemoj ici kroz while petlju i proveravati da li je rezultat isti takav... ne verujes SQL serveru? ;) Dovoljno je da proveris da li dr.Read vrati red uopste i to je sve (ako je user/pass dobar vratice ti se jedan red, ako nesto od ta dva ne valja vratice ti se prazan reader).



Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: [c#] Username and password(hashing) 05.07.2009. u 12:34 · pre 210 meseci #8
moze sha-256

a informacije o korisniku, pa imas korinicko ime i proverio si da li je password hash validan, kad to uradis jednostavno ucitaj informacije o korisniku iz baze i prikazi u labelama ili cemu god hoces.
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: [c#] Username and password(hashing) 05.07.2009. u 13:06 · pre 210 meseci #9
Nasao sam i ovo
http://technet.microsoft.com/en-us/library/ms190357.aspx //ENCRYPTBYPASSPHRASE (Transact-SQL)
http://technet.microsoft.com/en-us/library/ms188910.aspx //DECRYPTBYPASSPHRASE (Transact-SQL)
Potpis
http://i.imgur.com/V3feW.jpg
http://on.wsj.com/H9yjz6 -- India Graduates Millions, but Too Few Are Fit to Hire
Re: [c#] Username and password(hashing) 06.07.2009. u 12:44 · pre 210 meseci #11
Ne vidim razlog zašto bi se bilo šta drugo koristilo osim SHA-256 ili 512....

Čak i MSDN kaže: Newer hash functions, such as the Secure Hash Algorithms SHA-256 and SHA-512, are available. Consider using the SHA256 class or the SHA512 class instead of the RIPEMD160 class.
Potpis
My programs don’t have bugs, they just develop random features.
Re: [c#] Username and password(hashing) 06.07.2009. u 15:18 · pre 210 meseci #13
Citat:

Ne vidim razlog zašto bi se bilo šta drugo koristilo osim SHA-256 ili 512....

Čak i MSDN kaže: Newer hash functions, such as the Secure Hash Algorithms SHA-256 and SHA-512, are available. Consider using the SHA256 class or the SHA512 class instead of the RIPEMD160 class.


Osnovni razlog zasto bi koristili RIPEMD160 je ako snimamo to u kolonu u bazi manje ce prostora zauzimati nego SHA-256 ili SHA-512, a vjerovatno ce i
hashovanje biti nesto brze (izrazeno u milisekundama).
Potpis
logic_rabbit (MCAD,MCSD,MCT,MCTS-
Windows development,MCPD)
Re: [c#] Username and password(hashing) 06.07.2009. u 16:50 · pre 210 meseci #15
Citat:
logic_rabbit: Osnovni razlog zasto bi koristili RIPEMD160 je ako snimamo to u kolonu u bazi manje ce prostora zauzimati nego SHA-256 ili SHA-512, a vjerovatno ce i
hashovanje biti nesto brze (izrazeno u milisekundama).


Da, ali opet... Hashovanje se odvija na client strani, pa milisekunde ne predstavljaju skoro nikakvu razliku - drugačije bi bilo da je opterećenje na bazi podataka. A što se tiče prostora u bazi; obično se kriptiraju korisnički podaci, a jako malo baza radi sa brojem korisnika koji se mjeri u milionima da bi se razlika stvarno drastično osjetila - naravno u odnosu na zaštitu tih istih korisničkih podataka ...
Iskreno, ja za taj RIPEMD160 nisam nikad ni čuo, dok za SHA jesam, i to jako mnogo puta... Ako je i SHA1 160 bita, i "razbijen" je, da li je onda RIPEMD160 "siguran"?
Btw, pretpostavljam da banke i vlade koriste SHA > 256 bita?
Potpis
My programs don’t have bugs, they just develop random features.
Re: [c#] Username and password(hashing) 06.07.2009. u 18:32 · pre 210 meseci #16
Ovo je sa MSDN-a, pise // This example assumes that there is a predefined constant DATA_SIZE.
sta ovde treba da bude DATA_SIZE, jel to text iz password polja moje forme?
Prvi put radim ovo, pomozite.
http://msdn.microsoft.com/en-u...urity.cryptography.sha256.aspx
Code:
byte[] data = new byte[DATA_SIZE];
byte[] result;
SHA256 shaM = new SHA256Managed();
result = shaM.ComputeHash(data);
Potpis
http://i.imgur.com/V3feW.jpg
http://on.wsj.com/H9yjz6 -- India Graduates Millions, but Too Few Are Fit to Hire
Re: [c#] Username and password(hashing) 06.07.2009. u 18:46 · pre 210 meseci #17
Citat:
Osnovni razlog zasto bi koristili RIPEMD160 je ako snimamo to u kolonu u bazi manje ce prostora zauzimati nego SHA-256 ili SHA-512, a vjerovatno ce i hashovanje biti nesto brze (izrazeno u milisekundama).


Ima tu nekoliko stvari. Sto se tice brzine za hashere koji se koriste u security-u je vazno upravo obrnuto, da bude sporiji. Sto zahtevniji algoritam => manji broj bajtova hashovan po sekundi => duze vreme potrebno za birthday attack i otkrivanje kolizije. To je generalno prozaicno za lozinke posto se digest radi nad blobovima reda par desetina bajtova a brzine hashera su reda par stotina Mb/s i jace u zavisnosti od implementacije, znaci da je recim 20 bajtova unicode lozinka i da je brzina hashera 200Mb/s vreme hashovanja je 0.1 microsekunda ;) malo je nevazno dal ce biti 0.11, ili 0.09 sekundi, vaznije je da hasher nema collision weakness.

U pravu si za storage, ali govorimo o razlici od 12 bajtova po korisniku, tj 12 kb za 1000 korisnika, bez preterivanja mislim da ces vise prostora na disku izgubiti kroz fragmentaciju stranica i indexa u SQL serveru nego sto ces ustedeti eliminacijom ovih 12 bajtova... A sa druge strane koristis NIST algoritam za koji ces lako saznati ako se pojavi exploit.
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: [c#] Username and password(hashing) 06.07.2009. u 19:03 · pre 210 meseci #18
data niz treba da ti sadrzi bajtove lozinke. Najjednostavnije je da UTF8 ili Unicode encoderom pretvoris string lozinke u niz bajtova i da onda taj niz hashujes.

Takodje, sam hash mozes da prebacis u base64 string sa Convert.ToBase64String(result) i da hash smestis kao string u bazu (da se ne maltretiras sa varbinary poljima).
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme