Sezar Şifrelemesi (Ceaser’s Cipher, Shift Cipher, Kaydırma Şifreleme)

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!='�'){
       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. Anonim

    ben bu şifreleme için c kullanarak aşağıdaki kodu yazdım fakat mod işlemim çalışmıyo z girdiğimde gülücük karakteri alıyorum normalde z nin ascii kodundan fazla bi değer olduğunda başa a ya dönmesini istiyorum fakat olmuyo,hata nerde göremedim,şimdiden teşekkür ederim ^^

    char *encrypt(char *s,int k)
    {
    static char result[MAXSTRING];
    int i;
    for(i=0;s[i]!=”;i++)
    {
    result[i]=((s[i]+k) % ‘z’);
    }
    return result;
    }

  2. furkan

    şöyle denedim oda olmadı 😀
    char *encrypt(char *s,int k)
    {
    static char result[MAXSTRING];
    int i,temp;
    for(i=0;s[i]!=”;i++)
    {
    temp=(s[i]+k);
    if(temp>’z’)
    {
    result[i]=s[i]+(‘z’ % temp);
    }
    else
    result[i]=(s[i]+k);
    }
    return result;
    }

  3. Şadi Evren ŞEKER Article Author

    programı kodlayıp yazının içerisine kodu ekliyorum. Kabaca hatanız, mod almanız ancak ‘a’ değeri kadar ekleme yapmamanız. Durumu anlatan bir örnek de yazının içerisine ekliyorum.

    başarılar

Bir cevap yazın

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