Merhabalar.
MD5 ve SHA1 günümüz web ve windows uygulamalarında sıklıkla kullandığımız hash adı verilen şifreleme algoritmalarıdır. Bu makalemizde bu teknikleri kullanmanın aslında ne kadar kolay olduğunu göreceğiz.
Öncelikle şunu belirtmeliyim, MD5 ve SHA1 sadece tek yönlü şifreleme yapabilen ve herzaman aynı sonucu veren fonksiyonlardır. Yani şifreleme sonrasında oluşturulan string ifade, eski haline çevrilemez. Uygulama geliştirici, oluşturulan string ifadeleri karşılaştırarak doğruluğu kontrol eder. Günümüz web uygulamalarında özellikle üyelik kayıt, üyelik girişi gibi işlemlerde kullanılırlar.
Verinin şifrelenmesi ve daha sonraki kontrolü şu şekilde bir yaşam döngüsüne sahiptir.
| 1. |
Ziyaretçi, bilgilerini üye kayıt formuna girer. |
| 2. |
Bilgilerden örneğin şifre alanı MD5 veya SHA1 şifreleme algoritmaları vasıtasıyla şifrelenerek veritabanına yazılır. |
| 3. |
Daha sonraki zamanlarda ziyaretçi üye girişi için şifresini girip, siteye giriş yapmak istediğinde formdan gelen şifre alanı tekrar aynı şekilde şifrelenir. |
| 4. |
Şifrelenme sonucunda ortaya çıkan string ifade ile veritabanındaki şifre alanındaki şifrelenmiş string ifade karşılaştırılır. |
| 5. |
Sonuç aynı ise giriş doğrulanır, eğer farklı ise şifreler birbirini tutmuyor demektir. Bu da şifrenin ziyaretçi tarafından yanlış girildiğini anlamına gelmektedir. |
Şimdi ASP.NET ortamında MD5 ve SHA1 algoritmalarının nasıl kullanıldığını gösteren bir örnek yapalım.
Yeni bir web site projesi açalım ve aşağıdaki resimdeki gibi bir tablo ve kontrolleri ekleyelim.
Şimdi de kodlarımızı yazalım. Default.aspx sayfamız tamamiyle şu kodlardan oluşacaktır.
Imports System.Security.Cryptography
Partial Class _Default
Inherits System.Web.UI.Page
Protected Sub btnsifrele_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnsifrele.Click
Dim sifrelenecekmetin As String = Me.txtmetin.Text
If sifrelenecekmetin.Length > 0 Then
lblsonuc.Text = Sifrele(sifrelenecekmetin)
Else
lblsonuc.Text = "Şifrelenecek Metin Yok"
End If
End Sub
Private Function Sifrele(ByVal SourceText As String) As String
Dim UnicodeEncode As New UnicodeEncoding()
Dim ByteSourceText() As Byte = UnicodeEncode.GetBytes(SourceText)
Select Case Me.Radiosecim.SelectedValue
Case "MD5"
Dim Sifre As New MD5CryptoServiceProvider()
Dim ByteHash() As Byte = Sifre.ComputeHash(ByteSourceText)
Return Convert.ToBase64String(ByteHash)
Case "SHA1"
Dim Sifre As New SHA1CryptoServiceProvider
Dim ByteHash() As Byte = Sifre.ComputeHash(ByteSourceText)
Return Convert.ToBase64String(ByteHash)
End Select
End Function
End Class
Kodlarıda eklediğimize göre sayfamızı debug edebiliriz. Karşımıza şöyle bir ekran çıkmalı.
Şifrelenecek metni girer ve şifrele butonuna basarsak texbox içine girilen değer şifrelenerek lblsonuc isimli label kontrolümüze yazılacaktır.
MD5 Hash algoritması, 128 bit şifrelenmiş string ifade oluşturur. Burdan şunu anlayabiliriz. Şifrelemeye maruz kalan string ifade bir kelime de olsa, bin kelimede olsa hep 128 bit’lik bir string değer ortaya çıkar.
Kimi güvenlik uzmanları SHA1 hash algoritmasının MD5’ e oranla daha sağlam olduğunu savunmaktadır. Sebep olarak ise, MD5’in iki farklı veride aynı sonucu üretmesi gerekçe olarak gösterilmektedir. (Sanırım çok düşük bir ihtimaldir)
Umarım faydalı olmuştur.
Makalenin kaynak kodlarına ulaşmak için buraya tıklayınız.
İsmail AKTAŞ