.NET İle MD5 Kullanma

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ir2
    ir2's avatar
    Bilgi/Destek Madalyası Developer Madalyası
    Kayıt Tarihi: 10/Mayıs/2003
    Erkek

    artık feci kolay çünkü kendinden gelen bi fonksiyon olmuş durumda örnek VB.NET kodu aşağıda

            Public Shared Function Encrypt(ByVal cleanString As String) As String
                 Dim clearBytes As [Byte]()
                 clearBytes = New UnicodeEncoding().GetBytes(cleanString)
                 Dim hashedBytes As [Byte]() = CType(CryptoConfig.CreateFromName("MD5"), HashAlgorithm).ComputeHash(clearBytes)
                 Dim hashedText As String = BitConverter.ToString(hashedBytes)
                 Return hashedText
            End Function

     

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    UnquaLe
    UnquaLe's avatar
    Kayıt Tarihi: 18/Temmuz/2005
    Erkek

    Arkadaşlara bide şifrelemenin amacını anlatalım...


    Önemli bilgileri şifreleyerek dışarıya gizlersiniz.. .. ama burda önemli olan.. bilgi ne kadar önemliyse.. okadar iyi bir şifreleme algoritması kullanmaktır. SHA algoritması 512bit şifreleme ye sahip.. 2048Bit'e kadar giden şifrelemeler var. tabi bunlar sizin datanızı büyütecektir.. yani size gerektiği şekilde uygun algoritmayı kullanmanız daha mantıklı...


    ama ben Key ile oluşturulan şifrelemeleri kullanıyorum


    Cennette köle olmaktansa, Cehennemde kral olmayı seçtim.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    tagext
    tagext's avatar
    Üstün Hizmet Madalyası Başarı Madalyası
    Kayıt Tarihi: 25/Temmuz/2002
    Erkek

    ir2 bunu yazdı:





    artık feci kolay çünkü kendinden gelen bi fonksiyon olmuş durumda örnek VB.NET kodu aşağıda


            Public Shared Function Encrypt(ByVal cleanString As String) As String
                 Dim clearBytes As [Byte]()
                 clearBytes = New UnicodeEncoding().GetBytes(cleanString)
                 Dim hashedBytes As [Byte]() = CType(CryptoConfig.CreateFromName("MD5"), HashAlgorithm).ComputeHash(clearBytes)
                 Dim hashedText As String = BitConverter.ToString(hashedBytes)
                 Return hashedText
            End Function


     





    ben de bir md5 class ı var MD5.getHashString diyorum direk encrypt ediliyor. bu kadar kasmaya gerek yok.


    bu arada md5 de problemler ortaya çıkmaya başlamış. aynı md5 i veren 2 adet dosya oluşturbilmişler. normalde boyle bişey olmaması lazım. SHA şimdilik daha sağlıklı görünüyor.


    ftw
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    tagext
    tagext's avatar
    Üstün Hizmet Madalyası Başarı Madalyası
    Kayıt Tarihi: 25/Temmuz/2002
    Erkek

    vs.net2005 de komple registration formu var lan. ad soyad şifre....


    şifremi unuttum componenti var.


    login componenti var.


    ftw
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    UnquaLe
    UnquaLe's avatar
    Kayıt Tarihi: 18/Temmuz/2005
    Erkek

    .net 2.0 da çok daha fazla yenilik var


    ama şuan o logiin kontrolleri okadarda ilgimi çekmedi..


    database olarak sadece sqlserver 2005 express kullanabiliosun.. yani provider'ı değiştiremiosun :( ama admin sayfasaı falan güsel.


    Cennette köle olmaktansa, Cehennemde kral olmayı seçtim.
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    a4tech
    a4tech's avatar
    Kayıt Tarihi: 21/Temmuz/2005
    Erkek

    ya konu eski ama yazmadan geçemecem :)


    <?


     
      function hashleme($degisken) {


     $hash_degiskeni = $degisken;


        $hash = md5($hash_degiskeni);


      return $hash ;


    }


     echo hashleme(123456);


    ?>


     


     burada  hashleme();  (  ) içine yazdığınız veriyi md5 haline cevirir acıklamasınıda yapayım :)

  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    NightShower
    NightShower's avatar
    Kayıt Tarihi: 17/Temmuz/2005
    Erkek

    Aşağıda verdiğim örnek, çoğu zaman kullandığımız Kayıt Formu ile Login Formundan oluşuyor. Kayıt olurken, email adresi ve parola bilgileri soruluyor. Bunun sonrasında parola bilgisi MD5 algoritması ile şifrelenip veritabanına veriler yazılıyor.

    Login Formumuzda ise, aynı veriler istenerek, yine parolamız MD5 algoritması ile veritabanına gönderiliyor. Yani SQL'deki "Select" cümlesi aracılığı ile kontrolümüzü yapıyoruz.

    Örneğimize geçmeden önce örneğimiz içerisinde kullandığımız Panel nesnemizin bazı özelliklerini inceleyelim.

    Height = Panelimizin yüksekliği (pixel cinsinden)
    Width = Panelimizin genişliği (pixel cinsinden)
    BackColor = Panelimizin arkafon rengi
    BackImageUrl = Panelimizin arkasında resim göstermek istiyorsak
    BorderColor = Panelimizin sınır çizgisinin rengi
    BorderWidth = Panelimizin sınır çizgisinin genişliği (pixel cinsinden)
    Font = Panelimizin içerisinde gösterilecek metinlerin Font adı
    Visible = Panelimizin görüntülenme ayarı (true/false değerleri alır)

    Şimdi de veritabanına bağlanmak amaçlı kullandığımız bağlantı satırımızı nasıl kullandığımıza bakalım.

    Klasik ASP içerisinde veritabanına bağlanmak istediğimizde bunu çoğu zaman asp dosyamızın içerisine yazıyorduk. Veya başka bir sayfaya yazıp, onu kullanacağımız sayfaya dahil ediyorduk. Hatırlarsanız bu yönteme "Include File" yöntemi deniyordu. Bu durum güvenlik açısından birçok açık ortaya çıkartmak ile beraber, yetersiz de kalıyordu.

    .Net'te ise bu sıkıntılar atlatıldı. Şimdi projemiz ile ilgili birçok veriyi saklayabileceğimiz, güvenli bir dosyaya kavuştuk. İşte bu dosyanın adı web.config

    Web.config dosyasının ayrıntılarını burada işleyemeyeceğim. Sadece veritabanı bağlantı satırımızı nasıl web.config sayfamıza yazmamız gerektiğini ve aspx dosyamızdan nasıl çağırıldığını göstereceğim.

    Örneğin web.config dosyamızın içeriği:





     
    <configuration>
        <appSettings>
            <add key="strConn" value="server=localhost;uid=dtuser;pwd=dtpass;database=dotnet" />
        </appSettings>
    </configuration>


    Gelelim aspx dosyamızdan nasıl çağırabileceğimize:






    string dbConnStr = ConfigurationSettings.AppSettings["strConn"];



    Sanırım artık konumuza dönebiliriz. İlgili tüm açıklamaları kod satırları arasında anlatmağa çalıştım. Ayrıca CodeBehind yönetimi kullanarak kodladım. Bu yöntemden de kısaca bahsetmek gerekirse, CodeBehind yöntemi ile kodumuz ile görselliğimizi tamamen ayırıyoruz. Böylelikle tasarım değişikliği gibi durumlarda hiçbir sıkıntı çekmiyoruz. Örneği incelediğinizde durumu da farkedeceksiniz.

    Fakat öncelikle, veritabanamızın yapısını, stored procedure ve web.config dosyamızın ilgili kodlarını verelim.

    Tablomuz:

    registerUser





     
     
    user_id int (IDENTITY)
    user_email varchar 255
    user_password binary 16


    Stored Procedure:

    sp_ins_regUser





     
     
    CREATE PROCEDURE sp_ins_regUser 
     
    @user_email varchar(255),
    @user_password binary(16)
     
    AS
     
    INSERT INTO
                registerUser
                (user_email, user_password)
    VALUES
                (@user_email, @user_password)
    GO


    sp_sel_loginCheck





     
     
    CREATE PROCEDURE sp_sel_loginCheck
     
    @uemail varchar(255),
    @upwd binary(16)
     
    AS
     
    SELECT
                user_id
    FROM
                registerUser
    WHERE
                user_email = @uemail AND
                user_password = @upwd
    GO


    Web.config





     
    <configuration>
        <appSettings>
            <add key="strConn" value="server=localhost;uid=dtuser;pwd=dtpass;database=dotnet" />
        </appSettings>
    </configuration>



    İlk önce görsel arayüzümün bulunduğu, kişinin kayıt olduğu sayfa olan:

    register.aspx





     
    <%@ Page Language="c#" Inherits="registerForm.regForm" Src="register.aspx.cs"%>
    <html>
    <body>
    <asp:Panel id="register" runat="server">
                   <form id="regForm" method="post" runat="server">
                   <table cellspacing="0" cellpadding="3" border="0">
                <tr>
                            <td colspan="2">Kayıt Formu</td>
                </tr>
                <tr>
                            <td><b>E-posta Adresiniz</b></td>
                            <td><asp:TextBox id="emailAdr" runat="server" MaxLength="255"></asp:TextBox></td>
                </tr>
                <tr>
                            <td><b>Parolanız</b></td>
                            <td><asp:TextBox runat="server" MaxLength="10" id="parola" TextMode="Password"></asp:TextBox></td>
                </tr>
                <tr>
                            <td align="right" colspan="2"><asp:Button id="btnOk" OnClick="doRegister" runat="server" text="Formu Gönder"/></td>
                </tr>
                </table>
                </form>
    </asp:Panel>
    <asp:Panel id="registerStatus" runat="server">
                <asp:Label id="lblInfo" runat="server"></asp:Label>
    </asp:Panel>
    </body>
    </html>



    Bu sayfanın kodlarını işleyen:

    register.aspx.cs





     
     
    using System;
    using System.IO;
    using System.Web.UI; //web textbox larına ulaşabilmemiz için gereken class
    using System.Security.Cryptography; //md5 için gerekli class
    using System.Text; //UTF fonksiyonu için gerekli class
    using System.Data; //veritabanı işlemleri için gerekli class
    using System.Data.SqlClient; //veritabanı işlemleri için gerekli class
    using System.Configuration; //web.config dosyamızdan veri okuyabilmek amaçlı class
     
     
    namespace registerForm
    {
                public class regForm : System.Web.UI.Page
                {
                            //kodlamada kullanacağımız nesnelerimizi tanımlıyoruz.
                            protected System.Web.UI.WebControls.TextBox emailAdr;
                            protected System.Web.UI.WebControls.TextBox parola;
     
                            protected System.Web.UI.WebControls.Panel register;
                            protected System.Web.UI.WebControls.Panel registerStatus;
     
                            protected System.Web.UI.WebControls.Label lblInfo;
     
                            public void Page_Load(Object Src, EventArgs E)
                            {
                                         //sayfa yüklendiğinde panellerimizin görüntülenme ayarlarını yapıyoruz.
                                         //form ekranı ilk olarak görüntülenecek.
                                         register.Visible = true;
                                         registerStatus.Visible = false;
                                         lblInfo.Text = "";
                            }
     
                            //Formu Gönder butonuna tıklandığında çalışan fonksiyonumuz
                            protected void doRegister(object sender, System.EventArgs e)
                            {
                                         //girilen verileri alıyoruz.
                                         string txtEmailAdr = emailAdr.Text;
                                         string txtParola = parola.Text;
     
                                         //işlem sonucu göstermek amaçlı ikinci panelimizi görünür kılıyoruz.
                                         register.Visible = false;
                                         registerStatus.Visible = true;
     
                                         try
                                         {
                                                     //parolanız şifrelenmesi için fonksiyona gönderiyoruz.
                                                     //şifrelenmiş verimiz byte haline geleceği için değişkenimizi 
                                                     //byte olarak tanımlıyoruz.
                                                     byte[] encyrptedPassword = md5Password(txtParola);
     
                                                     //veritabanına Email adresini ve şifrelenmiş Parolayı kayıt ediyoruz.
                                                     SqlConnection conn = new SqlConnection(ConfigurationSettings.AppSettings["strConn"]); 
                                                     conn.Open();
                                                     SqlCommand sc = new SqlCommand ();
                                                     sc.Connection = conn;
                                                     sc.CommandType = CommandType.StoredProcedure;
                                                     sc.CommandText = "sp_ins_regUser"; 
     
                                                     sc.Parameters.Add("@user_email", SqlDbType.VarChar, 255, "user_email"); 
                                                     sc.Parameters["@user_email"].Value = txtEmailAdr; 
                                                     sc.Parameters.Add("@user_password", SqlDbType.Binary, 16, "user_password"); 
                                                     sc.Parameters["@user_password"].Value = encyrptedPassword;
     
     
                                                     sc.ExecuteNonQuery();
                                                     conn.Close();
     
                                                     //try-catch bloğuna soktuğumuz işlemimizde bir sorun çıkmadı ise
                                                     //ziyaretçimizi bilgilendiriyoruz.
                                                     lblInfo.Text = "Kayıt işleminiz başarı ile gerçekleştirilmiştir";
                                         }
                                         catch
                                         {
                                                     //veritabanında bir hata oluştuysa ziyaretçimizi bilgilendiriyoruz.
                                                     lblInfo.Text = "Kayıt işleminiz sırasında bir hata oluştu. Lütfen tekrar deneyiniz.";
                                         }
                            }
     
                            byte[] md5Password(string pass)
                            {
                                         //md5 şifrelenmesi için verimizin byte haline gelmesi gerekli.
                                         //veri 8-bit şeklinde dönüştürülmesi için ilk önce UTF fonksiyonuna gönderiliyor.
                                         UTF8Encoding encoder = new UTF8Encoding();
                                         //md5 şifrelemesi için nesnemizi oluşturuyoruz.
                                         MD5 md5 = new MD5CryptoServiceProvider();
                                         //verimizi md5 ile çalıştırıyoruz.
                                                  //dikkat ederseniz UTF fonksiyonundan dönen değeri GetBytes ile alabildik.
                                         byte[] donenDeger = md5.ComputeHash(encoder.GetBytes(pass));
                                         //şifrelenmiş değerimizi geri gönderiyoruz.
                                         return donenDeger;
                            }
     
     
     
                }
    }



    Kullanıcı adı, parola verilerinin girildiği görsel sayfa olan:

    login.aspx





     
    <%@ Page Language="c#" Inherits="loginForm.Login" Src="login.aspx.cs"%>
    <html>
    <body>
    <asp:Panel id="loginStatus" runat="server">
                <asp:Label id="lblInfo" runat="server"></asp:Label>
    </asp:Panel>
     
    <asp:Panel id="pnlLogin" runat="server">
                <form id="loginForm" method="post" runat="server">
                                   <table cellspacing="0" cellpadding="3" border="0">
                            <tr>
                                         <td colspan="2">Siteye Giriş</td>
                            </tr>
                            <tr>
                                         <td><b>E-posta Adresiniz</b></td>
                                         <td><asp:TextBox id="emailAdr" runat="server" MaxLength="255"></asp:TextBox></td>
                            </tr>
                            <tr>
                                         <td><b>Parolanız</b></td>
                                         <td><asp:TextBox id="parola" runat="server" MaxLength="10" TextMode="Password"></asp:TextBox></td>
                            </tr>
                            <tr>
                                         <td align="right" colspan="2"><asp:Button id="btnLogin" OnClick="doLogin" runat="server" text="Formu Gönder"/></td>
                            </tr>
                            </table>
                </form>
    </asp:Panel>
    </body>
    </html>



    login.aspx dosyamızı işleyen sayfamız:

    login.aspx.cs





     
     
    using System;
    using System.IO;
    using System.Web.UI; //web textbox larına ulaşabilmemiz için gereken class
    using System.Security.Cryptography; //md5 için gerekli class
    using System.Text; //UTF fonksiyonu için gerekli class
    using System.Data; //veritabanı işlemleri için gerekli class
    using System.Data.SqlClient; //veritabanı işlemleri için gerekli class
    using System.Configuration; //web.config dosyamızdan veri okuyabilmek amaçlı class
     
    namespace loginForm
    {
                public class Login : System.Web.UI.Page
                {
                            //kodlamada kullanacağımız nesnelerimizi tanımlıyoruz.
                            protected System.Web.UI.WebControls.TextBox emailAdr;
                            protected System.Web.UI.WebControls.TextBox parola;
     
                            protected System.Web.UI.WebControls.Panel pnlLogin;
                            protected System.Web.UI.WebControls.Panel loginStatus;
     
                            protected System.Web.UI.WebControls.Label lblInfo;
                            
                            public void Page_Load(object sender, System.EventArgs e)
                            {
                                         //sayfa yüklendiğinde panellerimizin görüntülenme ayarlarını yapıyoruz.
                                                  //form ekranı ilk olarak görüntülenecek.
                                         pnlLogin.Visible = true;
                                         loginStatus.Visible = false;
                                         lblInfo.Text = "";
                            }
     
                            //Formu Gönder butonuna tıklandığında çalışan fonksiyonumuz
                            protected void doLogin(object sender, System.EventArgs e)
                            {
                                         //girilen verileri alıyoruz.
                                         string uid = emailAdr.Text;
                                         string pwd = parola.Text;
     
                                         //işlem sonucu göstermek amaçlı ikinci panelimizi görünür kılıyoruz.
                                         pnlLogin.Visible = false;
                                         loginStatus.Visible = true;
     
                                         //parolanız şifrelenmesi için fonksiyona gönderiyoruz.
                                         //şifrelenmiş verimiz byte haline geleceği için değişkenimizi 
                                         //byte olarak tanımlıyoruz.
                                         byte[] encyrptedPwd = md5Password(pwd);
     
                                         //veritabanına ilgili verileri göndererek kontrolümüzü yaparız.
                                         SqlConnection conn = new SqlConnection(ConfigurationSettings.AppSettings["strConn"]);                            
                                         conn.Open();
                                         SqlCommand sc = new SqlCommand ();
                                         sc.Connection = conn;
                                         sc.CommandType = CommandType.StoredProcedure;
                                         sc.CommandText = "sp_sel_loginCheck"; 
                                                                             
                                         sc.Parameters.Add("@uemail", SqlDbType.VarChar, 255, "uemail"); 
                                         sc.Parameters["@uemail"].Value = uid; 
                                         sc.Parameters.Add("@upwd", SqlDbType.Binary, 16, "upwd"); 
                                         sc.Parameters["@upwd"].Value = encyrptedPwd;
     
                                         try
                                         {
                                                     //Elimizdeki verilerle çalıştırdığımız SP'mizden geri bir kolon, bir satır döndüğü
                                                     //için SqlCommand nesnesinin ExecuteScalar() metodunu kullanıyoruz.
                                                     //user_id şuanda bizim işimize yaramıyor, fakat nasıl çekildiğini göstermek amacı ile 
                                                     //bu satırı da kodumuza ekledim.
                                                     string user_id = sc.ExecuteScalar().ToString();
                                                     //Email ve parola doğru ise bilgilendiriyoruz.
                                                     lblInfo.Text = "Hoşgeldiniz ";
                                         }
                                         catch
                                         {
                                                     //Email ve parola yanlışsa tekrar girmesini istiyoruz.
                                                     lblInfo.Text = "Yanlış E-posta Adresi/Parola. Lütfen bilgilerinizi kontrol edip tekrar deneyiniz.";
                                         }
                                         conn.Close();
                            }
     
                            byte[] md5Password(string pass)
                            {
                                         //md5 şifrelenmesi için verimizin byte haline gelmesi gerekli.
                                         //veri 8-bit şeklinde dönüştürülmesi için ilk önce UTF fonksiyonuna gönderiliyor.
                                         UTF8Encoding encoder = new UTF8Encoding();
                                         //md5 şifrelemesi için nesnemizi oluşturuyoruz.
                                         MD5 md5 = new MD5CryptoServiceProvider();
                                         //verimizi md5 ile çalıştırıyoruz.
                                         //dikkat ederseniz UTF fonksiyonundan dönen değeri GetBytes ile alabildik.
                                         byte[] donenDeger = md5.ComputeHash(encoder.GetBytes(pass));
                                         //şifrelenmiş değerimizi geri gönderiyoruz.
                                         return donenDeger;
                            }
                            
                }
    }

     


     


    Alıntıdır.

  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Mc_MoLLa
    Mc_MoLLa's avatar
    Kayıt Tarihi: 05/Temmuz/2003
    Erkek
    a4tech bunu yazdı:



    ya konu eski ama yazmadan geçemecem :)


    <?



      function hashleme($degisken) {


     $hash_degiskeni = $degisken;


        $hash = md5($hash_degiskeni);


      return $hash ;


    }


     echo hashleme(123456);


    ?>


     


     burada  hashleme();  (  ) içine yazdığınız veriyi md5 haline cevirir acıklamasınıda yapayım :)






    Ahahah :) lan millet MD5("aliveli"); yazmak yerine önce bu fonksiyonu tanımlayıp sonra da hasleme("aliveli"); yazsın ki...


    Ayrıca, konu .Net de md5 hashing, PHP .Net mi çıkarıon yoksa haberimiz mi yoq :)


    Ilk Turk Arabası
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    UnquaLe
    UnquaLe's avatar
    Kayıt Tarihi: 18/Temmuz/2005
    Erkek

    Merhabalar


    şöyle bir makale buldum... ve MD5'i çürütüyor..


    http://www.codeproject.com/useritems/GoodbyeMD5.asp
    küçük harfle yazılan ve rakam olan md5 ile hashlenmiş textleri geri çevirebiliyorlarmış..


    http://passcracking.com/

    önerilen : anahtar kelime vererek hashleme yapan algoritmalar kullanmak..


    örnek : SHA


    Cennette köle olmaktansa, Cehennemde kral olmayı seçtim.
Toplam Hit: 3005 Toplam Mesaj: 9