Yazan: Şadi Evren ŞEKER

İlkel şifreleme yöntemlerinden birisidir. Basitçe şifrelenmek istenen metindeki her karakterin anahtara kadar kaydırılması ile şifrelenir (encrypt). Şifrenin açılmasında (decrypt) anahtar kadar her karakter geri kaydırılır.

Örnek Mesaj (plain text) : “baba dede”
Anahtar (Key) : 2
Şifreli Mesaj (cipher text) : “dcdc fgfg”

Saldırı yöntemi olarak anahtarların tamamı denenebilir. Örneğin 26 harf bulunna ingilizce için 25 ihtimal teker teker denenirse metine ulaşmak mümkündür.

Gelen soru üzerine C / C++ dilindeki kodlamasını aşağıdaki şekilde veriyorum:

#include <stdio.h>
#include <conio.h>
void shift(char *kelime, int anahtar){
     char c = kelime[0];
     int i = 0;
     while(c!='\0'){
       if(c>=65&&c<=90){
                        kelime[i]=(kelime[i]+anahtar);
                        if(kelime[i]>90)
                                       kelime[i]= (kelime[i]%90)+65;
       }
       if(c>=97&&c<=122){
                        kelime[i]=(kelime[i]+anahtar);
                        if(kelime[i]>122)
                                       kelime[i]= (kelime[i]%122)+97;
       }
       i++;
       c=kelime[i];
     }
}
int main(){
     char kelime[100]="ali baba ve kirk haramiler";
     shift(kelime,2);
     printf("nsifreli :%s",kelime);
     shift(kelime,-2);
     printf("nacilmis :%s",kelime);
     getch();
}

Yukarıdaki kodda, basitçe gelen kelimenin içeriğine bakılıyor ve şayet mesaj ascii tablosundaki büyük harflere tekabül ediyorsa (65 büyük A ve 90 büyük Z olduğuna göre, bu sayılar arasındaysa) veya küçük harfe tekabül ediyorsa (97 küçük a ve 127 küçük z harfleri arasındaysa) bu durumda anahtar miktarı arttırma yapılır.

Anahtar miktarı arttıktan sonra, z harfinden sonraki bir harfe gelirse modu alınıp a harfi kadar ekleme yapılır.

örneğin z harfini ( ascii değeri 127) anahtar değeri olan 2 kadar arttırdığımızı düşünelim, bu durumda değeri 129 gibi bizim için anlamsız bir harf olacak, bu değerin mod 127 karşılığı alınıp ‘a’ harfinin değeri eklenir, sonuçta 129 % 127 = 2 + 97 = 99 olur ki bu değer c harfidir.
Kodun örnek ekran çıktısı aşağıdaki şekildedir:

dikkat edileceği üzere, sadece harfleri şifrelemiş ancak ascii kod karşılığı 32 olan boşluk sembolünü olduğu gibi bırakmıştır. Bunun sebebi, şifrelenmesini istediğimiz iki aralığı (büyük ve küçük alfabe harflerini) dikkate alıyor olmasıdır.

Yorumlar

  1. Şadi Evren ŞEKER Article Author

    C dilindeki kodu verilmiştir. Herhangi bir C derleyicisi ile kodu yazıp çalıştırabilirsiniz. Ne yazık ki bu sitedeki yazıların çoğu bilgisayar bilimleri çalışan kişiler için olduğundan, son kullanıcıya yönelik, programlama bilgisi olmayanlar için hazır programlar bulunmuyor. Yine de hiçbir programlama bilginiz olmasa dahi, aşağıdaki adreste bulunan DEV-CPP programını kurup, buradaki kodu copy/paste ettikten sonra çalıştırabilirsiniz.

    http://www.bloodshed.net/devcpp.html

    Ayrıca youtube üzerinde dev-cpp diye aratırsanız video şeklinde kurulum ve kod derleme anlatımları mevcut.

    Başarılar

  2. can

    Şadi Evren Bey sitenizi severek takip ediyorum.

    Programınızı koştuğumda ‘y’ karakterinde hatalı şifreleme alıyorum.

    anahtar değer 2 olduğunda a(97) -> c(99) a şifreleniyorsa z(122) -> b(98) e şifrelenmesi gerekmiyor mu? Bu durum da if koşulu çalıştığında kelime[i] = (kelime[i] % 122) + 96; olur.

    #include
    #include
    void encrypt(char *kelime, int anahtar){
    char c = kelime[0];
    int i = 0;
    while (c != ‘\0’){
    if (c >= 65 && c 90)
    kelime[i] = (kelime[i] % 90) + 64;
    }
    if (c >= 97 && c 122)
    kelime[i] = (kelime[i] % 122) + 96;
    }
    i++;
    c = kelime[i];
    }
    }

    void decrypt(char *kelime, int anahtar){
    char c = kelime[0];
    int i = 0;
    while (c != ‘\0’){
    if (c >= 65 && c <= 90){
    kelime[i] = (kelime[i] – anahtar);
    if (kelime[i]= 97 && c <= 122){
    kelime[i] = (kelime[i] – anahtar);
    if (kelime[i]<97)
    kelime[i] = 122 – (96 – kelime[i]);
    }
    i++;
    c = kelime[i];
    }
    }
    int main(){
    char kelime[100] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    printf("Plain Text: %s\n", kelime);
    encrypt(kelime, 2);
    printf("Ciphertext: %s\n", kelime);
    decrypt(kelime, 2);
    printf("Plain Text: %s\n", kelime);
    getch();
    return 0;
    }

Bir cevap yazın

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