|
MD5 ile Veri Şifreleme |
|
Gönderiliyor lütfen bekleyin... |
|
|
Bu makalemizde herhangi
bir string ifadenin nasıl MD5 ile şifreleneceğini öğreneceğiz. Bu sırada web.config,
Panel Nesnesi, Stored Procedure gibi konulara da değineceğiz.
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:
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
İ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"%>
|
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"%>
|
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;
}
}
}
|
Makale:
MD5 ile Veri Şifreleme C#, Visual C# ve .NET Osman N. Hömek
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|