Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Osman N. Hömek
Osman N. Hömek
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
2 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler:  C# / VC#/.NET Osman N. Hömek
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Başlangıç
Kategori : C# / VC#/.NET
Yayınlanma Tarihi : 10.8.2003
Okunma Sayısı : 40610
Yorum Sayısı : 6     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 26.12.2024
Turhal Temizer
Mac OS/X Removing CUDA 26.12.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak 26.12.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi 26.12.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
MD5 ile Veri Şifreleme
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
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"%>
Kayıt Formu
E-posta Adresiniz
Parolanız


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"%>
Siteye Giriş
E-posta Adresiniz
Parolanız


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
  • Yazılan Yorumlar
  • Yorum Yaz
NİS
12
2004
Sizin de belirttiğiniz gibi örnek sadece öğretici bir program niteliğinde. Bu nedenle profesyonel projelerde çok daha detaylı bilgi sahibi olunması benim de önerim.
NİS
12
2004
Veritabanindaki bilgilerin yetkisiz kisilerce okunmamasi icin ogretici bir program. Fakat programda sakincali olan durum, 16 bit hash degerini rasgele girisle sisteme dogrulatmanın cok sorun olmamasi.. Giris sayisinin kisitlanmasi veya DES kullanmak belki daha uygun olacaktır. Ayrica bir programı user, business ve data kisimlarina ayirirsak user veri girme kisminda bu tur bir fonksiyon kullanılmasa daha uygun olabilir.
AĞU
12
2003
İlginiz için teşekkür ederim. Yardımcı olabildiysem ne mutlu bana..
AĞU
11
2003
güzel bi yazı. Kutluyorum. Bende ASP ile md5 için bileşen arıyordum geçengün demekki .Net te hazır namespace varmış.
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • 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