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 programı nerden indirebilirim veya nereden kullanabilirim biri yardımcı olsun
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
while yapısında bi hata veriyor ne hatası çözemedim
Ş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;
}