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.

Bu yazıyı beğendiyseniz, başkalarının da ilgisini çekebilirsiniz:


376 views

Leave a Reply


dokuz * = 27

Benzer Yazılar:

Bilgisayar Kavramları üzerinde şu anda okumakta olduğunuz 'Sezar Şifrelemesi (Ceaser’s Cipher, Shift Cipher, Kaydırma Şifrelemelesi)' isimli yazı 21 Feb 2008 tarihinde, saat: 14:40 'de Şadi Evren ŞEKER tarafından gönderilmiş, toplam376 defa okunmuştur.

Benzer yazıları C/C++, Veri Güvenliği(Cryptography) kategorilerinden okuyabilirsiniz. Yazar ile irtibat kurmak için email gönderebilirsiniz. Yazıya yorum yapabilir ya da yapılan yorumları RSS 2.0 ile takibe alabilirsiniz.


Category: C/C++, Veri Güvenliği(Cryptography)