[ AMD guy @ 04.07.2009. 09:39 ] @
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();
            }
        }
[ AMD guy @ 04.07.2009. 19:01 ] @
Jel moguce uraditi kriptovanje neke kolone u MS SQL?
[ Pharos @ 04.07.2009. 21:06 ] @
Jel se to meni čini ili je konekcija otvorena sve dok se ne zatvori dijalog? :)

http://www.google.com/#hl=en&a...q=&aqi=&fp=dMlfxuRvj0I
[ AMD guy @ 05.07.2009. 10:10 ] @
Da, izgleda tako :)
my mistake
[ mmix @ 05.07.2009. 10:33 ] @
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).



[ AMD guy @ 05.07.2009. 11:06 ] @
Postoji SHA256 za .NET http://msdn.microsoft.com/en-u...urity.cryptography.sha256.aspx
Jel to to?
[ AMD guy @ 05.07.2009. 11:22 ] @
Jedno pitanje, kako da prikazem informacije o korisniku koji se ulogovao?
Barem ime i prezime, neki savet bi mi pomogao.
Hvala
[ mmix @ 05.07.2009. 11:34 ] @
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.
[ AMD guy @ 05.07.2009. 12:06 ] @
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)
[ logic_rabbit @ 06.07.2009. 07:58 ] @
Postoji i MD160 kao zamjena za MD5 od Frameworka 2.
http://msdn.microsoft.com/en-u...ography.ripemd160(VS.100).aspx

Mozda bi njega bilo najpametnije koristiti?
[ Sapphire @ 06.07.2009. 11:44 ] @
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.
[ AMD guy @ 06.07.2009. 12:44 ] @
Koristicu SHA-256
[ logic_rabbit @ 06.07.2009. 14:18 ] @
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).
[ AMD guy @ 06.07.2009. 14:42 ] @
Dobar je i SHA-256, posto nemam veliku bazu.
[ Sapphire @ 06.07.2009. 15:50 ] @
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?
[ AMD guy @ 06.07.2009. 17:32 ] @
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);
[ mmix @ 06.07.2009. 17:46 ] @
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.
[ mmix @ 06.07.2009. 18:03 ] @
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).