ASP.NET Webforms Şifreleme Sistemleri Guid Md5 ve Sha1 kullanımı

En basit ve etkin şekilde şifre üretmek ve bunu geri dönüşümsüz(oluşan değer geri dönüştürülüp kod ile eski haline gelemez) yapmak isterseniz Nette üç yönteminiz vardır.

1.GUID:Manası  evrensel eşsiz Id (Globally Unique ID) ? dir. Yani size daha önce hiç oluşturulmamış bir karakterler kümesi oluşturur.

 String sguid   = System.Guid.NewGuid.ToString();

Yukarıdaki kodu her çalıştırdığınıza guid değişkenimizin alabileceği değer şöyledir;

696c4182-eec1-48ed-91e9-8ad0dd8e0678


2.sha1 yöntemidir.

String ssha1  = FormsAuthentication.HashPasswordForStoringInConfigFile(TextBox1.Text, "sha1");

Text kutusuna yazılan metin bilgisi sha1 algoritmasına göre şifrelenir. Örneğin  asd metin ifadesi;

9F5E409B28DF2110219AB2C723BC1C479E794322 şeklini alır.


3.md5 yöntemidir.Özellikle üyelik sistemi yazarken kullanıcı şifrelerini veritabanına direk kaydetmek pek güvenli bir yöntem değildir. Veritabanın kötü niyetli insanların eline geçme ihtimali göz önünde bulundurularak md5 şifreleme algoritması  kullanılabilir.

 String  smd5  = FormsAuthentication.HashPasswordForStoringInConfigFile(TextBox2.Text, "md5");

Text kutusuna yazılan metin bilgisi md5 algoritmasına göre şifrelenir. Örneğin  asd metin ifadesi;

7815696ECBF1C96E6894B779456D330E  şeklini alır.

 

Üye girişi yaparken izlemeniz gereken algoritma şudur. Üyenin giriş yaparken girdiği şifrede ilk önce yukarıdaki metotlardan biri ile ( kayıt işleminde hangisi kullanıldıysa ) şifrelenmiş hale çevrilir. Şifrelenmiş haliyle veritabanındaki değer karşılaştırılmalıdır.

Şifrem daha güvenli olsun diye 2 algoritmayı aynı anda kullanabilirsiniz. ilk önce sha1`e daha sonra sha1`e şifrelenmiş metni md5`e şifreleyebilirsiniz.

Örneğin;

String SHA1sifreli  = FormsAuthentication.HashPasswordForStoringInConfigFile(TextBox1.Text, "sha1");

String MD5sifreli  = FormsAuthentication.HashPasswordForStoringInConfigFile(SHA1sifreli "md5");

 

Gelin şimdi MD5 ile üye kaydı ve üye giriş işlemi yapalım.

    <form id="form1" runat="server">

        <div>
            <div style="border: 1px solid #0000FF; width: 500px">
                Kullanıcı adı:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                <br />
                Şifre&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :<asp:TextBox
                    ID="TextBox2" runat="server" TextMode="Password"></asp:TextBox>
                <br />
                Şifre Tekrar:<asp:TextBox ID="TextBox3" runat="server" TextMode="Password"></asp:TextBox>
                <asp:CompareValidator ID="CompareValidator1" runat="server"
                    ErrorMessage="Şifreler uyuşmuyor" ControlToCompare="TextBox2"
                    ControlToValidate="TextBox3"></asp:CompareValidator>
                <br />
                <asp:Label ID="Label1" runat="server"></asp:Label>
                <br />
                <asp:Button ID="uyeyap" runat="server" Text="Üye Kaydet" OnClick="uyeyap_Click" />
            </div>

            <br />
            <div style="border: 1px solid #FF0000; width: 500px">
                <br />
                Kullanıcı adı:<asp:TextBox ID="TextBox4" runat="server"></asp:TextBox>
                <br />
                Sifre&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :<asp:TextBox
                    ID="TextBox5" runat="server" TextMode="Password"></asp:TextBox>
                <br />
                <asp:Button ID="uyegiris" runat="server" Text="Üye Giriş" OnClick="uyegiris_Click" />
                <br />
            </div>
            <asp:Label ID="Label3" runat="server"></asp:Label>
        </div>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:sifrelemeConnectionString %>" DeleteCommand="DELETE FROM [sifreleme] WHERE [Kimlik] = @Kimlik" InsertCommand="INSERT INTO [sifreleme] ([Kulad], [sifremd5]) VALUES (@Kulad, @sifremd5)" SelectCommand="SELECT * FROM [sifreleme]" UpdateCommand="UPDATE [sifreleme] SET [Kulad] = @Kulad, [sifremd5] = @sifremd5 WHERE [Kimlik] = @Kimlik">
            <DeleteParameters>
                <asp:Parameter Name="Kimlik" Type="Int32" />
            </DeleteParameters>
            <InsertParameters>
                <asp:Parameter Name="Kulad" Type="String" />
                <asp:Parameter Name="sifremd5" Type="String" />
            </InsertParameters>
            <UpdateParameters>
                <asp:Parameter Name="Kulad" Type="String" />
                <asp:Parameter Name="sifremd5" Type="String" />
                <asp:Parameter Name="Kimlik" Type="Int32" />
            </UpdateParameters>
        </asp:SqlDataSource>
    </form>

Validation kontrolü kullandığım için Web.Config dosyasında şu ayarı yapınız.

<appSettings>
    <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
  </appSettings>

Evet sıra geldi kod bölümüne,Kulad ve sifremd5 alanları olan bir veritabanı hazırlayalım.Üye yapma kod bölümü şöyle olmalıdır.

 protected void uyeyap_Click(object sender, EventArgs e)
    {
        if ((TextBox1.Text != null) && (TextBox2.Text != null))
        {
            string smd5 = FormsAuthentication.HashPasswordForStoringInConfigFile(TextBox2.Text, "MD5").ToString();
            SqlDataSource1.InsertCommand = "INSERT INTO sifreleme (kulad, sifremd5) VALUES ('" + TextBox1.Text + "', '" + smd5 + "')";
            SqlDataSource1.Insert();
            Label1.Text = "Üye kaydı başarılı";
            TextBox1.Text = "";
        }
    }

Üye giriş bölümü ise aşağıdaki gibi olur.

   protected void uyegiris_Click(object sender, EventArgs e)
    {
        string kulad = TextBox4.Text;
        string sifre = FormsAuthentication.HashPasswordForStoringInConfigFile(TextBox5.Text, "MD5").ToString();
        //Text kurtusundan gelen veri md5 ile şifreleniyor çünkü veritabanındaki şifreli alanla karşılaştıma yapacağız.
        SqlConnection bag = new SqlConnection("Data Source=DESKTOP-GK2SE36\\SQLEXPRESS;Initial Catalog=sifreleme;Integrated Security=True");
        bag.Open();
        SqlCommand cmd = new SqlCommand("select * from sifreleme", bag);
        SqlDataReader dr = cmd.ExecuteReader();
        if (dr.Read())
        {
            if ((kulad == dr["kulad"].ToString()) && (sifre == dr["sifremd5"].ToString()))
            {
                Session["kullanici"] = dr["kulad"].ToString();
                Response.Redirect("admin.aspx");
            }
            else
            {
                Label3.Text = "Giriş Başarısız";
            }
        }
    }

Kodları çalıştırıp bir kaç tane üye oluşturun.Sonra oluşturduğunuz üyelerden birini test edin.Oluşturduğum üyelerin şifrelenmiş bilgileri aşağıdaki gibi olur.





Etiketler
Md5 Guid Sha1 Şifre Hash Password
Mesaj Yaz