Rastgele Şifre Üretme

Rastgele Şifre Üretme – 1, İnternet sitelerine kayıt olurken sık sık karşımıza çıkan şifre üretme programlarının bir benzerini oluşturmaya çalışacağız

Merhaba arkadaşlar,

Bugün sizlerle beraber bir önceki örneğimiz olan Rastgele Sayı Üretme örneğinin devamı niteliğinde olacaktır.

Örneğimizde internet sitelerine kayıt olurken sık sık karşımıza çıkan şifre üretme programlarının bir benzerini oluşturmaya çalışacağız. Fakat bu yazımızı iki parçaya böleceğiz. İlk parça da istenilen karakter sayısına göre rastgele şifre üreteceğiz. Örneğimizin ikinci parçasında ise kullanıcının belirlediği kriterlere göre şifre oluşturacağız.

Şifre oluşturma işlemine başlayabilmemiz için ilk olarak karakterlerimizi belirlememiz gerekiyor. Harf aralığımız olarak İngiliz Alfabesini tercih edeceğiz. Sayı aralığı olarak 0-9 sayı aralığını kullanacağız. Şifremizin daha güçlü olması için şifreleme örneğimize sembollerde ekleyeceğiz. Şimdi tek tek belirlediğimiz aralıkları inceleyelim

İngiliz Alfabesi Büyük Harf Aralığı

A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z

İngiliz Alfabesi Küçük Harf Aralığı

a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z

Sayı Aralığı

0, 1, 2, 3, 4, 5, 6, 7, 8, 9

Sembol Aralığı

!, +, -, ?, *, _ , /, @, ‘, }, {, ,, /

Temel olarak aralığı bu şekilde tanımlayabiliriz.


Belirlediğimiz aralıkları birer dizi olarak örneğimize ekleyelim.

char buyukAlfabe[26] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
char kucukAlfabe[26] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
char rakam[10] = {'0','1','2','3','4','5','6','7','8','9'};
char sekil[13] = {'!','+','-','?','*','_','/','@','\'','}','{',',','\/'};

Dizimizi oluşturduk. Artık kullanıcıdan kaç karakterli bir şifre istediğini öğrenebiliriz. Bu karakter değerine ileride tekrar ihtiyacımız olacağı için “karakterSayisi” adında bir değişken oluşturalım ve bu değişkene kullanıcıdan alacağımız değeri atayalım.

char buyukAlfabe[26] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
char kucukAlfabe[26] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
char rakam[10] = {'0','1','2','3','4','5','6','7','8','9'};
char sekil[13] = {'!','+','-','?','*','_','/','@','\'','}','{',',','\/'};
printf("Kac karakterli bir sifre olusturmak istiyorsunuz ? \n");
int karakterSayisi = 1;
scanf("%d",&karakterSayisi);

Kullanıcıdan üreteceğimiz şifrenin kaç karakterli olacağını da öğrendiğimize göre artık şifremizi üretebiliriz. Rastgele şifreler oluşturacağımız için rastgele sayı üretme örneğimizde kullandığımız “time.h” kütüphanesi “srand()” ve “rand()” fonksiyonlarını da bu örneğimizde kullanacağız. Bundan dolayı “time.h” kütüphanemizi örneğimize dahil edelim ve ardından “srand()” fonksiyonumuz ile başlangıç değerimizi belirtelim.

Her bir karakter için ayrı ayrı bir değer oluşturmamız gerektiği için belirlediğimiz karakter sayısı kadar dönen bir while döngüsü kuralım.

While döngüsünün dışına “belirlenenKarakter” adında bir değişken oluşturalım. Bu değişken döngü her döndüğünde rastgele olarak belirlenen karakteri tutacaktır.

srand(time(NULL));
char belirlenenKarakter = '-';
int sayac = 0;
while(sayac != karakterSayisi)
{
     //Rastgele seçim işlemleri
     sayac++
}

Artık karakter sayısı kadar dönüş yapan bir while döngüsü oluşturduk. Her bir karakterin nasıl seçileceğini belirtebiliriz.

Bizim en başta belirtmiş olduğumuz 4 farklı dizi vardı (büyük harf, küçük harf, rakam ve sembol). Bunlar arasından rastgele bir seçim yapmamız ve bu seçimi bir değişkende tutmamız gerekiyor. Bu işlem için “secim” adında bir integer değer oluşturalım ve bu değişkene rastgele 0-4 arasında bir sayı seçimi yapmasını isteyelim.

srand(time(NULL));
char belirlenenKarakter = '-';
int sayac = 0;
while(sayac != karakterSayisi)
{
        int secim = rand() % 4;
        sayac++;
}

Evet artık rastgele 0 ile 4 aralığında bir seçim yaptık.

Peki bu bizim ne işimize yarayacak ? Biz bu seçim ile karakter tipini belirtmiş olacağız.

  • 0 : Büyük harf seçimi
  • 1: Küçük harf seçimi
  • 2: Rakam seçimi
  • 3: Sembol seçimi

şeklinde bir yapı kuracağız. Bu yapıyı kurmak için “switch case” yapısını kullanacağız. Hemen yapımızı kuralım.

     srand(time(NULL));
    char belirlenenKarakter = '-';
    int sayac = 0;
    while(sayac != karakterSayisi)
    {
        int secim = rand() % 4;
        switch(secim)
        {
        case 0:
            //Buyuk Harf Sec
            break;
        case 1:
            //Kucuk Harf Sec
            break;
        case 2:
            //Rakam Sec
            break;
        case 3:
            //Sembol Sec
            break;
        }

    sayac++;
    }

Switch case yapımız da kurulduğuna göre rastgele seçimler yapabiliriz. Bu seçimlerimizi de “belirlenenKarakter” değişkenini aktararak hafızada tutabiliriz.

 srand(time(NULL));
    char belirlenenKarakter = '-';
    int sayac = 0;
    while(sayac != karakterSayisi)
    {
        int secim = rand() % 4;
        switch(secim)
        {
        case 0:
            belirlenenKarakter = buyukAlfabe[rand() % 26];
            break;
        case 1:
            belirlenenKarakter = kucukAlfabe[rand() % 26];
            break;
        case 2:
            belirlenenKarakter = rakam[rand() % 10];
            break;
        case 3:
            belirlenenKarakter = sekil[rand() % 13];
            break;
        }
    sayac++;
    }

Döngümüz her döndüğünde rastgele bir karakter üretebiliyor artık tek yapmamız gereken bu karakteri ekrana yazmak. While döngüsünün sonuna oluşan değeri çıktı olarak eklersek eğer başarılı bir şekilde şifremizi oluşturuyor olacağız.

    srand(time(NULL));
    char belirlenenKarakter = '-';
    int sayac = 0;
    while(sayac != karakterSayisi)
    {
        int secim = rand() % 4;
        switch(secim)
        {
        case 0:
            belirlenenKarakter = buyukAlfabe[rand() % 26];
            break;
        case 1:
            belirlenenKarakter = kucukAlfabe[rand() % 26];
            break;
        case 2:
            belirlenenKarakter = rakam[rand() % 10];
            break;
        case 3:
            belirlenenKarakter = sekil[rand() % 13];
            break;
        }
    printf("%c",belirlenenKarakter);
    sayac++;
    }

Artık rastgele şifre üretme örneğimizin ilk parçasının sonuna geldik. İkinci parçasında bu işlemi bir fonksiyon haline getireceğiz ve kullanıcın talep ettiği özelliklerde (Sadece harf , sadece sayı, sembol ve sayı, vs…) şifreler oluşturacağız. Yazımızı bitirmeden önce tüm kodları ve ardından ekran çıktısını eklemek isterim.


Tüm Kodlar

/*
* Engin Yenice
* enginyenice.com
*/
#include <stdio.h>
#include <stdlib.h>
#include "time.h"
int main()
{
    char buyukAlfabe[26] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
    char kucukAlfabe[26] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
    char rakam[10] = {'0','1','2','3','4','5','6','7','8','9'};
    char sekil[13] = {'!','+','-','?','*','_','/','@','\'','}','{',',','\/'};

   printf("Kac karakterli bir sifre olusturmak istiyorsunuz ? \n");
    int karakterSayisi = 1;
    scanf("%d",&karakterSayisi);
    
    srand(time(NULL));
    char belirlenenKarakter = '-';
    int sayac = 0;
    while(sayac != karakterSayisi)
    {
        int secim = rand() % 4;
        switch(secim)
        {
        case 0:
            belirlenenKarakter = buyukAlfabe[rand() % 26];
            break;
        case 1:
            belirlenenKarakter = kucukAlfabe[rand() % 26];
            break;
        case 2:
            belirlenenKarakter = rakam[rand() % 10];
            break;
        case 3:
            belirlenenKarakter = sekil[rand() % 13];
            break;
        }
    printf("%c",belirlenenKarakter);
    sayac++;
    }
    return 0;
}

Rastgele şifre üretme – 1 örneğimi incelediğiniz için teşekkür ederim. Sağlıklı günler dilerim..

Bloğumu halen incelemediniz mi ? https://enginyenice.com/

Hakkımda: https://enginyenice.com/hakkimda/

İletişim: https://enginyenice.com/iletişim/

Rasgele Sayı Üretme

Rasgele Sayı Üretme – C Programlama dilini kullanarak rastgele sayı üreten bir örnek uygulama hazırlayacağız.

Merhaba arkadaşlar,

Bugün ki yazımızda sizlerle birlikte C Programlama dilini ve CodeBlocks derleyicisini kullanarak rastgele sayı üreten bir örnek uygulama hazırlayacağız.

C Programlama dilinde rastgele sayı üretmek için “stdlib.h” kütüphanesinde bulunan “rand();” fonksiyonu kullanılmaktadır. Fakat “rand();” fonksiyonunun genel sorunu sürekli aynı değeri veya belirli bir aralıktaki sayıları vermesidir. Biz bu konuda 4 adet örnek örnek kodlayacağız bunlar:

  1. rand() fonksiyonu ile sayı üretmek.
  2. rand() fonksiyonu ile belirli bir aralıkta sayı üretmek.
  3. srand() fonksiyonu ile başlangıç değeri kullanarak rastgele sayı üretmek.
  4. srand() fonksiyonu ile başlangıç değeri kullanarak belirli bir aralıkta sayı üretmek.

İlk örneğimize başlayalım.

/* Engin Yenice
*  enginyenice.com
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
int rastgele;
rastgele=rand();
printf("%d",rastgele);
return 0;
}

rand() Fonksiyonu İle Sayı Üretmek

rand() fonksiyonunu kullanabilmek için ilk olarak “stdlib” kütüphanemizi dahil ediyoruz. Kütüphanemizi dahil ettikten sonra rand() fonksiyonumuzu kullanabiliriz.

Rastgele oluşacak sayımızı hafızada tutmak için bir adet integer değişken oluşturalım. Ben bu değişkene “rastgele” ismini vereceğim. Ardından rastgele değişkenimize rand() fonksiyonunu eşitleyerek rastgele bir sayı oluşturalım ve oluşturduğumuz sayıyı ekrana basalım.


Kod


Rastgele bir sayı ürettik fakat programı kapatıp tekrar başlattığımızda aynı değeri üretiyor bunun sebebini 3. örnekte detaylıca inceleyeceğiz. Şimdi kendi belirlediğimiz değer aralığında “rand()” fonksiyonu ile değer üretelim.


rand() Fonksiyonu İle Belirli Bir Aralıkta Sayı Üretmek

Aralık belirlemek için temel matematik formüllerinden yararlanacağız. Bu örneğimizde ise 150 ile 200 sayıları arasında bir rastgele sayı üretmeye çalışacağız. Başlangıç aralığımız belli olduğu için bir adet “baslangic” adında integer değişken oluşturalım. Oluşturduğumuz değişkene başlangıç değerimizi verebiliriz. Artık başlangıç değerimiz belirlendi.

Peki bitiş değerimizi nasıl tespit edeceğiz? Çok basit bir mod alma yöntemi ile bitiş belirlediğimiz aralıkta sabit kalabiliriz. Bunun için ilk olarak bitiş değerinden başlangıç değerini çıkarım.

Fark = 200 – 150

Fark = 50

Bizim üreteceğimiz sayının en fazla 50 olması gerekiyor. Peki bunu nasıl yapabiliriz ? Bunu yapabilmek için mod alma işlemi gerçekleştireceğiz. Üreteceğimiz sayının 51 e göre modunu alırsak. Yeni oluşacak sayımız en fazla 50 değerini alabilir. Artık rastgele bir sayı üretmiş olduk. Üretmiş olduğumuz sayıyı başlangıç değerimiz ile toplarsak 150 ile 200 arasında bir sayı üretmiş olacağız.


Kod

/* Engin Yenice
*  enginyenice.com
*/
#include <stdio.h>
#include <stdlib.h>

int main()
{
int rastgele;
int baslangic = 150;
rastgele=rand() % 50;
printf("%d",rastgele);
return 0;
}

150 ile 200 arasında rastgele bir sayı ürettik fakat programı tekrar başlattığımızda sürekli aynı değeri ürettiğini göreceksiniz. Bunun sebebini 3. örneğimiz olan “srand() fonksiyonu ile başlangıç değeri kullanarak rastgele sayı üretmek” başlığı altında inceleyeceğiz.


srand() Fonksiyonu İle Başlangıç Değeri Kullanarak Rastgele Sayı Üretmek

Biz ilk örneklerimizde sürekli aynı değerin üretildiğinden şikayetçiydik. Bunun sebebi srand değeri belirlememiş olmamızdan kaynaklanıyordu. rand() fonksiyonu kullanıldığında eğer ki srand() (başlangıç değeri) belirlenmediyse varsayılan olarak srand(1) şeklinde kabul edilmektedir.

Biz bu değerin sürekli farklı bir başlangıç değeri olması için başlangıç değerimize “time.h” kütüphanemizi kullanarak zamanı gönderiyoruz bu sayede benzersiz sonuçlar elde edebiliyoruz.

Örneğimize ilk olarak “time.h” kütüphanesini dahil edelim. Artık başlangıç değerimizi (srand()) verebiliriz. Burada iç içe fonksiyon kullanacağız ve time kütüphanesinden gelen time() fonksiyonu ile srand() fonksiyonunu beraber kullanacağız.

Kullanım:

srand(time(NULL)); 

Kod

/* Engin Yenice
*  enginyenice.com
*/
#include <stdio.h>
#include <stdlib.h>
#include "time.h"

int main()
{
srand(time(NULL));
int rastgele;
rastgele=rand();
printf("%d",rastgele);
return 0;
}

srand() Fonksiyonu İle Başlangıç Değeri Kullanarak Belirli Bir Aralıkta Sayı Üretmek

Bir önceki örneğimizde her çalıştırıldığında rastgele değer üreten bir örnek oluşturmuştuk. Bu örneğimizde ise 150 ile 200 arasında rastgele sayılar üretmeye çalışacağız. Başlangıç aralığımız belli olduğu için bir adet “baslangic” adında integer değişken oluşturalım. Oluşturduğumuz değişkene başlangıç değerimizi verebiliriz. Artık başlangıç değerimiz belirlendi.

Peki bitiş değerimizi nasıl tespit edeceğiz? Çok basit bir mod alma yöntemi ile bitiş belirlediğimiz aralıkta sabit kalabiliriz. Bunun için ilk olarak bitiş değerinden başlangıç değerini çıkarım.

Fark = 200 – 150

Fark = 50

Bizim üreteceğimiz sayının en fazla 50 olması gerekiyor. Peki bunu nasıl yapabiliriz ? Bunu yapabilmek için mod alma işlemi gerçekleştireceğiz. Üreteceğimiz sayının 51 e göre modunu alırsak. Yeni oluşacak sayımız en fazla 50 değerini alabilir. Artık rastgele bir sayı üretmiş olduk. Üretmiş olduğumuz sayıyı başlangıç değerimiz ile toplarsak 150 ile 200 arasında bir sayı üretmiş olacağız.

İlk olarak time.h kütüphanesini dahil ediyoruz. Ardından srand() ve time() fonksiyonlarımızı bir arada kullanarak başlangıç değeri atıyoruz. Artık 150 ile 200 değerleri arasında rastgele değerler üretebiliriz.

Kod

/* Engin Yenice
enginyenice.com
*/
#include <stdio.h>
#include <stdlib.h>
#include "time.h"

int main()
{
srand(time(NULL));
int baslangic = 150;
int rastgele;
rastgele=baslangic + rand()%51;
printf("%d",rastgele);
return 0;
}


Rastgele sayı üretme örneğimi incelediğiniz için teşekkür ederim. Sağlıklı günler dilerim.

Bloğumu halen incelemediniz mi ? https://enginyenice.com/

Hakkımda: https://enginyenice.com/hakkimda/

İletişim: https://enginyenice.com/iletişim/