C# - MD5 Şifreleme

C# ile uygulamasını anlatmadan önce bir şifreleme tekniği olan MD5 Şifreleme'den bahsetmek istiyorum.

MD5 Message Digest olarak bilinen bir şifreleme tekniğidir. Girilen veriyi hash yöntemi ile şifreler ve 128 bitlik bir sonuç döndürür.

Asimetrik bir tekniktir yani şifrelenmiş olan veriye ulaşmanın bir yolu yoktur.Fakat garanti olmamakla beraber brute-force saldırıları ile şifre kırılabilir çünkü deneme yanılma yoluyla şifre tahmin edilir ve zaman alıcı bir yöntemdir.

Yaygın olarak kullanım alanları
  • Veri tabanında şifrelerin açık bir şekilde kaydedilmesini istemiyorsak şifreleri bu yöntemle tutarız.
Örnek olarak 123456 olan şifremiz veri tabanında e10adc3949ba59abbe56e057f20f883e olarak kaydedilecektir. Veri tabanında şifre alanını en az 32 karakter olarak belirtmelisiniz. 
  • İki farklı verinin içeriğini görmeden karşılaştırılmasını sağlamaktır.
C# ta System.Security.Cryptography kütüphanesini kullanmalıyız. MD5Sifrele adında string bir parametre alan bir metot oluşturuyoruz. Kullandığımız temel sınıfları kod kısmındaki yorum alanından bulabilirsiniz.

 public static string MD5Sifrele(string sifre)
        {
            // MD5CryptoServiceProvider sınıfına ait bir nesne oluşturduk.
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            //Parametre olarak gelen veriyi byte dizisine dönüştürdük.
            byte[] dizi = Encoding.UTF8.GetBytes(sifre);
            //dizinin hash'ini hesaplattık.
            dizi = md5.ComputeHash(dizi);
            //Hashlenmiş verileri depolamak için StringBuilder nesnesi oluşturduk.
            StringBuilder sb = new StringBuilder();
            //Her byte'i dizi içerisinden alarak string türüne dönüştürdük.

            foreach (byte ba in dizi)
            {
                sb.Append(ba.ToString("x2").ToLower());
            }

            //hexadecimal(onaltılık) stringi geri döndürdük.
            return sb.ToString();
        
        }

Daha sonra bu metodu kullanarak kayıt olma işlemi için şifreleme işlemini yapan MVC'de Index Action'da bu metodu kullanıyoruz. Daha önceden MD5 ile şifrelediğimiz şifre ile şifre tekrar alanındaki şifreyi MD5 formatına dönüştürüp karşılaştıran bir algoritma kullandım.

[HttpPost]
public ActionResult Index(Giris g)
{
   if (MD5Sifrele(g.Password) == MD5Sifrele(g.ConfirmPassword))
   {
     Response.Write("<script>alert('Kayıt başarılı');</script>");  
   }
   else
   {
     Response.Write("<script>alert('Şifreler Eşleşmiyor');</script>");     
   }
   return View();            
}

MD5 ile şifreleme tekniğini temel olarak görmüş olduk.

Yorumlar