C# Şifreleme Algoritması Oluşturma, Asp.Net Şifreleme ve Çözme

c# şifreleme

C# ile gelen birçok güvenli ve hazır şifreleme algoritması vardır bu konuyla daha önceden ilgilenen arkadaşlar eminim birkaçını hemen hatırlar; Des, Rsa, Hash, Md5, Sha gibi şifreleme teknikleri mevcuttur. Hepsinin şifreleme mantığı farklıdır tabi güvenlik düzeyleri de. Bu yazıda çok güvenli diyemeyeceğim ancak kendimize ait bir şifreleme mantığı oluşturmak isteyenler için basit bir C# şifreleme algoritması oluşturma örneği bulacaksınız. Bu yöntem kesinlikle çalıntı-kopya değil, tamamen benim geliştirdiğim ve kodları inceleyince çok basit olduğunu göreceğiniz bir yöntemdir.

Biliyorsunuz ki veri tabanı kullanırken güvenlik açısından kullanıcı parolalarının gerçek haliyle saklanması doğru değildir çünkü güvenlik açığından kaynaklanan bir dinleme işleminde veri tabanından sorgu yaparken bu sorguya ait bilginin görülmesiyle şifre açığa çıkmış olacaktır. Özellikle Access gibi güvensiz veri tabanı kullanacaksanız, veri tabanı dosyanızı sitenizden indiren kişi tabloları açıp şifreyi kolayca görecektir. Bu yüzden veri tabanına şifre kaydı yaptırırken yazdığımız şifreyi önce algoritmamızla dönüştürtüp, dönüştürülmüş halini göndermek daha güvenli olacaktır. Okurken de önce dönüştürülmüş veri alınır sonra sayfamız içinde yorumlanır ve kontrol işlemi gerçekleştirilir.

Asp.Net şifreleme ve çözme işleminde ilk yapmamız gereken şey içinde alfabenin bütün harflerinin olduğu ve tüm rakamların olduğu bir key oluşturmak. Bu sırayı rastgele yapalım ki şifre anlaşılmaz olabilsin. Burada sıra önemli değil ama key içinde, yazacağımız şifredeki karakterlerin olması için alfabenin tüm harfleri ve rakamları kullandım, isterseniz özel karakterleri de ekleyebilirsiniz.

private string key = "bqğsş402jf7üleoa8umı3g6nç5czyiv9p1tkwrdöh ";
private string sifrele(string item)
{
string sifrelenen = "";
string veri = item;
for (int i = 0; i < veri.Length; i++)
{
sifrelenen += key.IndexOf(veri[i]).ToString() + "+";
}
return sifrelenen;
}

Fonksiyonu açıklayayım; sifrele (yazdığınız şifre) şeklinde fonksiyonu çağırdığınızda, Şifrenizin tüm karakterleri sırasıyla incelenir, o an ki karakter sizin key içinde kaçıncı karakterse bulunur ve sifrelenen isimli değişkene eklenir ve + eklenir. Burada + eklememin amacı şifreyi çözerken kolaylık sağlayacak olmasıdır. Bir örnek verecek olursak; diyelim ki şifremiz ahmet olsun bu durumda a harfi, key içinde 16. karakterdir yani index numaraları normalde 0 ‘dan başladığı için a ‘nın index numarası 15’tir. sifrelenen isimli değişken 15+ oldu. h harfi ise key içinde 41. sırada yani index no:40 bu durumda sifrelenen değişkeni 15+40+ oldu bunun gibi bütün harfler tek tek incelenecek ve sifrelenen=15+40+18+13+34+ olacaktır. Veri tabanımıza bu şekilde kayıt yaptıracağız. Yeni başlayanlar için Access veri tabanına bu sorguyu nasıl yazacağımızı anlatayım; öncelikle Access veri tabanı için Namespace kısmına yani en üste using System.Data.OleDb; yazıyoruz (Oledb nesnesini kullanacağımız için bu şekilde yazdım). Formumuzda kullanıcı adı ve şifre şeklinde 2 tane TextBox olsun isimleri kadi ve sifre olsun, bir de gönder butonu olsun. App_Data klasörü içindeki Access veri tabanı ismi vtb olsun ve içinde uyeler isimli bir tablo olsun, bu tabloda da kadi ve sifre diye iki alan olsun (şifre alanının türü sayı değil metin olmalı). Kullanıcı  ilk defa kaydetmek için Gönder butonunun Click ‘ine şu kodları yazıyoruz;

OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath(@"App_Datavtb.mdb"));
DataSet ds = new DataSet();
OleDbDataAdapter da = new OleDbDataAdapter(@"insert into uyeler(kadi,sifre) values('"+kadi.Text+"','"+sifrele(sifre.Text)+"')", con);
da.Fill(ds);

Kullanıcıyı kaydettikten sonra Giriş formunda yine aynı kullanıcı adı şifre ve gönder isimli elemanlarımız olduğunu ve isimlerinin biraz önce anlattığım gibi olduğunu varsayarsak; Kullanıcı siteye giriş yaparken bilgilerini doğrulamak için “Gönder” Butonu Click’ine aşağıdaki kodları yazmalıyız;

OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath(@"App_Datavtb.mdb"));
DataSet ds = new DataSet();
OleDbDataAdapter da = new OleDbDataAdapter(@"select * from uyeler where kadi='"+kadi.Text+"' ", con);
da.Fill(ds);
if (sifrele(sifre.Text) == ds.Tables[0].Rows[0][1].ToString())
{
/*Bu kısımda artık kullanıcı şifresi onaylanmıştır, yönlendirme size kalmış, Session kullanarak mı yaparsınız, başka yöntemle mi o size kalmış.*/
}

NOT:Aşağıdaki sifrecoz() fonksiyonunu kullanmayı düşünmüyorsanız yani sadece sifrele() fonksiyonunu kullanmayı düşünüyorsanız, fonksiyon içindeki “+” kısmını silebilirsiniz böylece ahmet şifresinin karşılığı 15+40+18+13+34+ yerine + ‘lardan mahrum 1540181334 olacaktır (bazıları bu görünümün daha profesyonel olduğunu düşünecektir). Bu kodlarda gördüğünüz gibi sadece şifreleme yaptırdım ve çözmeye ihtiyacımız yok çünkü kişinin girdiği şifreyi sifrele() fonksiyonuyla çevirip çevrilmiş halini veri tabanındakiyle karşılaştırmak yeterli oluyor. Eğer bunun yerine şifre çözme fonksiyonuyla veri tabanındaki bilgiyi alıp-çözdürüp-TextBox ‘daki ile karşılaştırmak isterseniz Şifre çözme fonksiyonunu da yazıyorum;

private void sifrecoz(string item)
{
string sifrecozulen="";
string veri = item;
for (int i = 0; i < veri.Length; i++)
{
if (veri[i].ToString() == "+")
{
sifrecozulen += key[int.Parse(veri.Substring(0, i))].ToString();
veri = veri.Remove(0, i + 1);
i = 0;//döngünün sıfırlanmasını sağlar
}
}
}

Umarım bu makale sizlere C# şifreleme algoritması oluşturma konusunda en azından bir fikir sahibi olmaya  yardımcı olmuştur.

Paylaş Facebook'ta Paylaş Twitter'da Paylaş Google+'da Paylaş

Yazıya yapılan yorumlar

2 Yorum - "C# Şifreleme Algoritması Oluşturma, Asp.Net Şifreleme ve Çözme"

Sıralama:   En Yeniler | Eskiler | Beğenilenler
Misafir

Teşekkürler kardeşim

Kenan

şifreleme algoritmasının üreteceği şifrelenmiş metinde aynı karakter adetinde olmasıda önemli bu veritabanının şişmemesinede neden olur.

elinize sağlık güzel anlatım.

wpDiscuz