Rastgele Şifre Üretme

Rastgele Şifre Üretme

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/

Yayımlayan

3 Replies to “Rastgele Şifre Üretme

    1. Standart şifrelere göre daha güvenli diyebiliriz. Çünkü oluşturulan şifrelerde standart harflerin yanı sıra rakam ve sembol kullanıyoruz bu da şifreyi bulabilmeleri için test edecekleri kombinasyon değerlerini arttırıyor. Eğer şifrenizin ne kadar güçlü olduğunu test etmek isterseniz. How Secure is My Password? sitesinden şifrenizin ne kadar sürede kırılacağını test edebilirsiniz. Yorumunuz için teşekkür ederim.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir