none
C# da sql veri tabanı kullanılarak maile şifre yollama RRS feed

  • Soru

  • Merhabalar başlıkta biraz absürt yazdım farkındayım. Benim elimde bir tane sql veri tabanı var ben burada kullanıcının şifresini tutuyorum. C#'da ise şifremi unuttum bölümü kullanıcı mailini girdiğinde mailine random 6 haneli kod yollattırıyorum. Buraya kadar herşey normal ama ben bu kodu nasıl kontrolünü sağlayabilirim? Yardımcı olursanız sevinirim. Kolay Gelsin. İyi akşamlar
    1 Haziran 2019 Cumartesi 20:54

Tüm Yanıtlar

  • Gonderdiginiz kod gecici şifresi degil mi zaten.


    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.

    1 Haziran 2019 Cumartesi 21:47
    Yanıtlayıcı
  • int sayi;
            Random rnd = new Random();
            private void RememberMe_Button_Click(object sender, EventArgs e)
            {
                sayi = rnd.Next(10000, 90000);
                MailMessage msj = new MailMessage();
                SmtpClient client = new SmtpClient();
                client.Credentials = new System.Net.NetworkCredential("Gönderen Mail Adresi", "Gönderen mail adresinin sifresi");
                client.Port = 587;
                client.Host = "smtp.live.com";
                client.EnableSsl = true;
                msj.To.Add(RememberMe_Textbox.text);
                msj.From = new MailAddress("mailadresi");
                msj.Subject = "Sifre Sifirlama";
                msj.Body ="Dogrulama Kodunuz : "+sayi.ToString();
                client.Send(msj);

            }

    Hocam bu mail sayfasının kodu ben bu sayi değişkenini insert into ile ekler gibi mi tutucam veri tabanında?

            
    1 Haziran 2019 Cumartesi 22:52
  • Hayir, veritabanında şifreler o sekilde tutulmaz. Onun yerine şifreyi bir 'salt' degeri ile hashlersin ve hash sonucunu tutarsın (tek yonlu algoritma). Sql Server, ornek adventure works veritabanında da ornegi var. Binary yerine, hash degerini base64 encode ile text seklinde tutabilirsin.

    Hash ornegi:

    void Main()
    {
    	// hash1, hash2 veritabaninan saklanan degerler
    	string hash1 = CreatePwdHash("pwd", "a@b.com");
    	string hash2 = CreatePwdHash("pwd", "c@d.com");
    	
    	Console.WriteLine("1:{0}\n2:{1}", hash1, hash2);
    	
    	// kullanici girerken parolasini yaziyor
    	// yazdigi parola veritabanindaki emaili 
    	// ve hash degeri ile kontrol ediliyor:
    	
    
    	var valid1 = ValidatePassword("pwd", "a@b.com", hash1); // hash1 ona ait
    	var valid2 = ValidatePassword("pwd", "a@b.com", hash2); // hash2 baskasinin
    
    	Console.WriteLine("{0},{1}", valid1, valid2);
    }
    
    
    private string CreatePwdHash(string password, string saltValue)
    {
    	var pwdHash = MD5
    	  .Create()
    	  .ComputeHash(Encoding.Unicode.GetBytes(BitConverter.ToString(Encoding.ASCII.GetBytes(saltValue)) + password));
    
    	return Convert.ToBase64String(pwdHash);
    }
    
    private bool ValidatePassword(string password, string saltValue, string hash)
    {
    	return CreatePwdHash(password, saltValue) == hash;
    }



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.


    2 Haziran 2019 Pazar 19:20
    Yanıtlayıcı