Merhaba, C# Şifre Üretici ve Kaydedici Uygulama yazım ile C# eğitim setime devam ediyorum. Bu uygulamada 6 farklı zorluğa sahip ve çok kendimize özel bir cümle üzerinden şifre oluşturma yöntemi yer almaktadır. Dersim devamında göreceğiniz yöntemleri kendinize göre değiştirebilirsiniz. Örnek olması ve fikir vermesi açısından yaptığım örnek bir projedir.
C# Şifre Üretici ve Kaydedici Uygulama
Bu projeyi yaparken, sitemde yer alan şu dersleri kullandım.
- C# Rastgele Şifre Oluşturma
- C# Random Sınıfı ile Oto Şifre Nasıl Oluşturulur?
- C# String Sayısal Değer Kontrolü
- C# TXT Dosyası Oluşturmak ve Yazı Yazmak
- C# Try Catch Finally Nasıl Kullanılır? Ayrıntılı Anlatım
- C# For Döngüsü Kullanımı ve İç İçe For Döngüleri
- C# Foreach Döngüsü Kullanımı
Bu derslerin dışında kullandığım yöntemler şöyledir.
Şifre oluştururken karakter ASCII tablosu üzerinden rastgele seçilmektedir.
6 farklı zorluk seviyesi
- Sadece Büyük Harf
- Sadece Küçük Harf
- Sadece Rakam
- Rakam ve Özel Karakterler
- Harfler (B/K) ve Özel Karakterler
- Tamamı Karışık
Kullanıcının yazdığı bir cümleyi oluşturan karakterleri kullanarak ve aralarına özel karakterler serpiştirerek şifre üretmek.
Oluşturulan şifredeki bazı harfleri benzer rakamlara dönüştürme yöntemi. Örneğin; a=@, O=0, l=1 şeklinde…
Yukarıdaki yöntemlere ek olarak oluşturulan şifrenin nerede kullanıldığı da yazılarak, şifrenin bir metin belgesine kayıt edilmesi işlemi yer almaktadır. Ben burada fazla uğraşmamak için metin belgesine yazmayı tercih ettim. Sizler projeyi edinerek herhangi bir database ‘e yazdırabilirsiniz.
Formumuzun ekran görüntüsü aşağıdaki gibidir.
C# Şifre Üretici ve Kaydedici Uygulama Kodları
Şimdi kodlarımızı adım adım verelim.
İlk olarak kullanılan yardımcı metotları vereyim.
int[] zorluk; string Sayi_Harf_Donusumleri(string sifre) { return sifre.Replace("a", "@").Replace("S", "5").Replace("G", "6").Replace("g", "9").Replace("l", "1").Replace("Z", "2") .Replace("B", "8").Replace("O", "0").Replace("T", "7"); } bool SayiMi(string text) { foreach (char chr in text) { if (!Char.IsNumber(chr)) return false; } return true; }
Yukarıdaki metotlar, sayı harf dönüşümlerini yapan ve şifrenin daha karışık halde olmasını sağlamak amacı ile eklemek istediğim bir özelliği kullanmak içindir.
SayıMı metodunun amacı şudur; Girilen cümle içerisinde bir yıl bilgisi ya da 4 karakterden uzun sayısal bir değer var ise bu sayıyı ikiye bölüp arasına bir özel karakter eklemek içindir. Bu metod girilen cümleyi oluşturan kelimelerin sayısal değer olup olmadığını kontrol eder.
int zorluk[] değişkeni, ASCII tablosundan seçilecek karakterlerin aralığını belirtmek için kullanacağız.
Standart Şifre Oluşturucusu – Oluştur Butonu Kodları
private void btn_olustur_Click(object sender, EventArgs e) { btn_kaydet.Enabled = true; txt_olusan_sfire.Text = ""; int sifre; string karakter = ""; //zorluk = new int[] { 33, 47 };// ASCII kod tablosundaki özel karakter kodları #1 //zorluk = new int[] { 48, 57 };// ASCII kod tablosundaki rakam karakter kodları //zorluk = new int[] { 58, 64 };// ASCII kod tablosundaki özel karakter kodları #2 //zorluk = new int[] { 65, 90 };// ASCII kod tablosundaki Büyük harf karakter kodları //zorluk = new int[] { 91, 96 };// ASCII kod tablosundaki özel karakter kodları #3 //zorluk = new int[] { 97, 122 };// ASCII kod tablosundaki Küçük harf karakter kodları Random rastgele = new Random(); if (cmb_zorluk.SelectedIndex >= 0) { switch (cmb_zorluk.SelectedIndex) { //Sadece Büyük Harf case 0: zorluk = new int[] { 65, 90 }; break; //Sadece Küçük Harf case 1: zorluk = new int[] { 97, 122 }; break; //Sadece Rakam case 2: zorluk = new int[] { 48, 57 }; break; //Rakam ve Özel Karakterler case 3: zorluk = new int[] { 33, 64 }; break; //Harfler Özel Karakterler case 4: zorluk = new int[] { 58, 122 }; break; //Tamamı Karışık case 5: zorluk = new int[] { 33, 122 }; break; } for (int i = 0; i < nud_sifre_karakter_adet.Value; i++) { sifre = rastgele.Next(zorluk[0], zorluk[1]); // ASCII tablosundan rastgele bir karakter seçiyoruz. karakter += Convert.ToChar(sifre).ToString(); // Rastgele seçilmiş olan sayıyı harf ve özel karakterlere çeviriyoruz. } if (chk_sayi_harf_donusumleri.CheckState == CheckState.Checked) txt_olusan_sfire.Text = Sayi_Harf_Donusumleri(karakter); else txt_olusan_sfire.Text = karakter; } else { MessageBox.Show("Zorluk seçmelisiniz."); } }
Zorluk combobox’undan seçilen zorluk değerine göre, ASCII tablosundan seçilebilecek karakterlerin aralığını belirliyoruz. Yorum satırı olarak işaretlenmiş kısımda hangi sayı aralıklarının hangi karakterleri tuttuğunu görebilirsiniz.
Belirtilen uzunluğa göre for döngüsü içinde seçilen zorluğa göre ayarlanmış zorluk[] dizisindeki ilk sayı ile ikinci sayı arasında kalan sayılardan biri rastgele seçiliyor. Convert.ToChar() metodu ile de rastgele seçilmiş olan sayının ASCII tablosundaki karşılığını elde ediyoruz.
Eğer sayı harf dönüşü checkbox işaretlenmiş ise; Sayi_Harf_Donusumleri metodumuzda belirtildiği gibi harfleri benzer sayılara dönüştürüyoruz.
Seçilen karakterler arka arkaya eklenerek şifre üretiliyor ve textbox’a yazılıyor.
Özel Şifre Oluşturucusu – Oluştur Butonu Kodları
private void btn_olustur_ozel_Click(object sender, EventArgs e) { btn_kaydet.Enabled = true; string cumle = txt_cumle.Text; string[] parcalar = cumle.Split(' '); string sifre = "", karakter = ""; int random_Secim = 0; Random rastgele = new Random(); zorluk = new int[] { 33, 47 };// ASCII kod tablosundaki özel karakter kodları #1 for (int i = 0; i < parcalar.Count(); i++) { random_Secim = rastgele.Next(zorluk[0], zorluk[1]); karakter = Convert.ToChar(random_Secim).ToString(); if (SayiMi(parcalar[i])) { if (parcalar[i].Length > 3) sifre += parcalar[i].Substring(0, 2) + karakter + parcalar[i].Substring(2, 2); } else { if (rastgele.Next(0, 2) == 0) { sifre += parcalar[i].Substring(0, 1).ToLower(); if (rastgele.Next(0, 2) == 1) sifre += karakter; } else { sifre += parcalar[i].Substring(0, 1).ToUpper(); if (rastgele.Next(0, 2) == 0) sifre += karakter; } } } sifre += karakter; if (chk_sayi_harf_donusumleri.CheckState == CheckState.Checked) txt_olusan_sfire.Text = Sayi_Harf_Donusumleri(sifre); else txt_olusan_sfire.Text = sifre; }
Burası size biraz karışık gelebilir. Bu sebeple elimden geldiğince açıklayacağım.
- İlk olarak parcalar[] adında bir dizi tanımladık.
- Girilen cümleyi Split metodu ile kelimelerine ayırdık.
- Çok fazla özel karakter olmasını istemediğim için ASCII kod tablosundaki bazı özel karakterler için zorluk[] dizisini doldurduk.
- For döngüsünde ilk olarak zorluk[] dizisinde belirtilen aralıktan bir özel karakter seçiyoruz. Bunu birazdan kullanacağız.
- SayiMi metodumuz ile parçanın sadece sayılardan oluşup oluşmadığını kontrol ediyoruz.
- Eğer kelime sadece sayıdan oluşuyor ve 3 karakter fazla uzunluğa sahip ise;
- Örneğin 2000 olarak bir kelime var ise 20 ve 00 olarak ayırıp arasına bir özel karakter koyuyoruz.
- Elde ettiğimiz ifadeyi Şifre değişkenine ekliyoruz.
- Eğer kelime sayısal değil ise;
- 0 ile 1 arasında rastgele bir sayı seçiyoruz.
- Eğer 0 gelirse;
- Kelimenin ilk harfini alıyoruz ve onu küçük harf yapıyoruz.
- Elde ettiğimiz ifadeyi Şifre değişkenine ekliyoruz.
- Tekrar bir sayı seçiyoruz. Eğer 1 gelmiş ise harften sonra bir özel karakter ekliyoruz.
- Elde ettiğimiz ifadeyi Şifre değişkenine ekliyoruz.
- Eğer 0 gelmediyse;
- Kelimenin ilk harfini alıyoruz ve onu büyük harf yapıyoruz.
- Elde ettiğimiz ifadeyi Şifre değişkenine ekliyoruz.
- Tekrar bir sayı seçiyoruz. Eğer 0 gelmiş ise harften sonra bir özel karakter ekliyoruz.
- Elde ettiğimiz ifadeyi Şifre değişkenine ekliyoruz.
- Eğer kelime sadece sayıdan oluşuyor ve 3 karakter fazla uzunluğa sahip ise;
- Son olarak şifrenin sonuna bir karakter daha ekliyoruz.
- Eğer sayı harf dönüşü checkbox işaretlenmiş ise;
- Sayi_Harf_Donusumleri metodumuzda belirtildiği gibi harfleri benzer sayılara dönüştürüyoruz.
Şifre Kaydetme Kodları
private void btn_kaydet_Click(object sender, EventArgs e) { try { string fileName = System.Windows.Forms.Application.StartupPath + "//Sifrelerim.txt"; string writeText = txt_nerenin_sifresi.Text + " = " + txt_olusan_sfire.Text; FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write); fs.Close(); File.AppendAllText(fileName, Environment.NewLine + writeText); MessageBox.Show("Kaydedildi"); btn_kaydet.Enabled = false; } catch (Exception ex) { MessageBox.Show("Kaydedilemedi" + Environment.NewLine + ex.Message); } }
İlk olarak şifrenin kaydedileceği metin belgesinin yolunu belirtiyoruz. Burada projenin EXE dosyasının olduğu klasörü belirttik.
Metin belgesine yazılacak veriyi ayarlıyoruz.
FileStream ile dosya yok ise create ediyor var ise açıyoruz.
Dosyaya eriştikten sonra yazılmasını istediğimiz veriyi metin belgesine yazıyoruz.
Eğer bir hata alırsak diye Try Catch kontrolü yapıyoruz.
C# Şifre Üretici ve Kaydedici Uygulama projemizde bu kadardı arkadaşlar. Diğer projelerimizde görüşmek üzere…
C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız.
Derslerime özel olarak hazırladığım Github Projeme buradan ulaşabilirsiniz… Bu dersimde Github ‘da yerini almıştır. Linke tıklayarak Github sayfasına gidebilir ve indirebilirsiniz.
Sağlıcakla ve takipte kalın.
12 KARAKTERLİ (YALNIZCA ASCII STANDARDI KARAKTERLERİ) İÇEREN ŞİFRELER.
Merhaba,
Size bu yazdığınız lazım ise aşağıdaki bağlantıya bakabilirsiniz.
https://mustafabukulmez.com/2020/06/09/c-random-sifre-uretme-ornegi/