C# Random Şifre Üretme Örneği dersim ile C# eğitim setime devam ediyorum. Bu dersin konusu yine bir random şifre üretme. :) Bazı dersler kendini tekrarlıyor olarak görünse de aslında hepsinde farklı yöntemler yer almaktadır. Bu dersin konusu olan şifre üretme elbette önceki derslerde yer alan yöntemden farklı. Buradaki yöntemimiz bizim dışarıdan girdiğimiz büyük harfler, küçük harfler ve rakamlar arasından, hangi tür karakterden kaç tane karakter seçilmesini istediğimizi belirterek üreteceğiz.
C# Random Şifre Üretme Örneği
Yukarıda belirttiğim gibi bu şifre üretme yöntemimizde;
- Dışarıdan büyük harf, küçük harf ve rakam aralığı gireceğiz.
- Dışarıdan kaç tane büyük harf, kaç tane küçük harf ve kaç tane rakam istediğimizi gireceğiz.
- Şifre üret dediğimizde, dışarıdan girdiğimiz sayı kadar ilgili karakterlerden seçerek karışık bir şifre üreteceğiz.
NOT: Bu derste daha önce hiç görmediğinizi düşündüğüm bir yöntem görebilirsiniz. En azından ben sektörde olduğum bunca zaman içerisinde hiç görmediğim ve yanlışlıkla keşfettiğim bir şeydi. :)
Şimdi aşağıdaki gibi bir ekran tasarımı yapalım. İsterseniz farklı tasarım yapabilirsiniz.
Karakter aralığı kısmını değişken, dizi ya da list olarak tutabilirsiniz.
Şimdi gelelim kodlarımıza… Şifre Üret butonunun click eventine gelelim ve kodlarımızı yazalım.
private void btn_sifre_uret_Click(object sender, EventArgs e) { txt_sifre.Text = ""; string sifre = ""; int rnd = 0; Random rnd_kh = new Random(); Random rnd_bh = new Random(); Random rnd_rk = new Random(); for (int i = 0; i < Convert.ToInt16(txt_b_harf_sayisi.Text); i++) { rnd = rnd_bh.Next(0, txt_buyuk_harfler.Text.Length - 1); txt_sifre.Text += txt_buyuk_harfler.Text[rnd]; } for (int i = 0; i < Convert.ToInt16(txt_k_harf_sayisi.Text); i++) { rnd = rnd_kh.Next(0, txt_kucuk_harfler.Text.Length - 1); txt_sifre.Text += txt_kucuk_harfler.Text[rnd]; } for (int i = 0; i < Convert.ToInt16(txt_rakam_sayisi.Text); i++) { rnd = rnd_rk.Next(0, txt_rakamlar.Text.Length - 1); txt_sifre.Text += txt_rakamlar.Text[rnd]; } Random rnd_karistir = new Random(); sifre = txt_sifre.Text; txt_sifre.Text = new string(sifre.ToCharArray().OrderBy(s => (rnd_karistir.Next(2) % 2) == 0).ToArray()); }
Kodları Açıklamamız Gerekirse
- İlk olarak her butona bastığımız yeni şifre üreteceğimiz için şifre textbox’unu temizliyoruz.
- Ürettiğimiz şifre hep aynı düzende olacağından dolayı tekrar karıştırmak için bir değişkene alıyoruz.
- Buradaki aynı düzenden kasıt, yukarıdaki kodlarımıza göre şifreler hep büyük harfler, küçük harfler ve rakamlar sırasında olacak. Örneğin AAAbb111 gibi olacak. Karışık olmayacaklar. Bu sebeple bu ürettiğimiz şifredeki karakterleri karıştırmamız gerekiyor.
- Üreteceğimiz Random sayı için bir değişken.
- Her aralık için bir Random tanımlıyoruz. Bu şekilde yapmazsak, diyelim ki bir Random tanımladık. Bu random’dan gelen bir sayı ile üç aralıktan karakter alırsak, her aralığın aynı indexteki karakterlerini almış oluruz.
- BH ‘den 3. karakter, KH 3. karakter RK’den 3. karakter şeklinde olur. Biz böyle istemiyoruz. Tamamen karışık seçsin.
- For döngüleri alınmasını istediğimiz karakter sayısı kadar dönmesi gerek. Biz 2 tane büyük harf istiyorsak iki kere dönmeli.
- Üreteceğimiz Random sayı, 0 ile aralıktaki karakter sayısından 1 eksik olacak şekilde üretilmeli. Çünkü biz indexler üzerinden karakter seçeceğiz. Eğer 0 yerine 1 seçersek verdiğimiz aralıktaki ilk karakterler asla seçilmezler. Eğer aralıktaki karakter sayısı kadar bir sayı seçilirse de IndexOutOfRange hatası alırız. Çünkü aralıkta verilen karakter sayısına denk gelen sayı index olarak düşünüldüğünde var olmayacaktır. Yani karakter aralığında 12 karakter varsa maksimum index 11 olacaktır. Maksimum indexi 11 olan bir dizi de 12. indexi seçmeye çalışmış oluruz.
- İşte size bahsettiğim “başka yerde görmemiş olabileceğinizi düşündüğüm” kısım burada. txt_sifre.Text += txt_buyuk_harfler.Text[rnd]; satırlarında gördüğünüz txt_buyuk_harfler.Text[rnd] ifadesine dikkatli bakın. Bir textbox içerisindeki veriden bir diziden veri çeker gibi çekebiliyoruz. Textbox içerisindeki verinin n numaralı indexinde yer alan karakteri alıyoruz.
- Üç döngü sonunda, dışarıdan girilen istenen karakter sayısı kadar, verilen karakter aralıklarından karakterlerini Random olarak aldık. 2. maddede belirttiğim gibi bu şifreyi tekrar karıştırmamız gerekiyor.
- Karıştırma işlemi için yeni bir Random tanımlıyoruz.
- Değişkene atama yaptıktan sonra, LINQ kullanarak şifreyi Shuffle ediyoruz yani karıştırıyoruz. (Ben LINQ konusunda çok iyi olmadığımdan araştırmalarım sonucunda bulduğum koddur. :) )
Son Olarak
Gördüğünüz gibi arkadaşlar. Bu önceki Random Şifre Üretme derslerinde yer alan yöntemlerden daha farklı olan bir yöntemdir. Bu şekilde farklı farklı yöntemler ile konuyu daha iyi anlayabilirsiniz.
Aşağıdaki bağlantılardan diğer Random Şifre Üretme derslerine gidebilirsiniz.
- C# Random Sınıfı ile Oto Şifre Nasıl Oluşturulur?
- C# Rastgele Şifre Oluşturma
- C# Şifre Üretici ve Kaydedici Uygulama
C# Random Şifre Üretme Örneği dersi de bu kadardı arkadaşlar. Diğer derslerimizde görüşmek üzere. Bu projemde Github’a proje olarak eklenmiştir.
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…
Sağlıcakla ve takipte kalın.