Sezar Şifrelemesi (Ceaser's Cipher, Shift Cipher, Kaydırma Şifrelemelesi)

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.
Kaynak;
http://bilgisayarkavramlari.sadievrenseker.com/2008/02/21/sezar-sifrelemesi-ceasers-cipher-shift-cipher-kaydirma-sifrelemelesi/
Previous
Next Post »