İlginizi Çekebilir
  1. Ana Sayfa
  2. C Sharp

C# Şifre Üretici ve Kaydedici Uygulama

C# Şifre Üretici ve Kaydedici Uygulama
+ - 2

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.

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

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.
  • 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. ?

Bu yazıya tepkiniz ne oldu?

Yazar Hakkında

Lise Ağ Sistemleri ve Yönetimi bölümü, üniversite Bilgisayar Programcılığı bölümü Ön Lisans, Yönetim Bilişim Sistemleri Lisans öğrenimi aldım. Askerlik görevimi tamamladım. Uzmanlık alanım; C# ve SQL Programlama dilleri ile müşteri odaklı, kullanıcı dostu ERP ve CRM gibi sistemleri geliştirmektir. Ayrıca şuanda PHP ve MYSQL alanında projeler geliştirmekteyim. C++, Phyton, Xamarin, MVC gibi konuları öğrenmek ve kendimi geliştirme çabası içerisindeyim. Discord için: https://discord.gg/FBxZeHu9

Değerli yorumlarınızı bekliyorum. :)

Yorumlar (2)

  1. 12 KARAKTERLİ (YALNIZCA ASCII STANDARDI KARAKTERLERİ) İÇEREN ŞİFRELER.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.