C Programlama Dili Sezar Algoritması ile Şifreleme Algoritmalarına Başlangıç
C programlama dili sezar algoritması ile şifreleme algoritmalarına başlangıç yapacağız. İlkel şifreleme algoritmalarından olan sezar algoritması anlaması ve çözülmesi çok kolaydır. Bu yüzden şifreleme algoritmalarında ilk anlatılan konular arasındadır. Şifre çözümü kolay olduğundan dolayı artık kullananın olduğunu sanmıyorum 🙂
- Sezar algoritması metindeki tüm harfler belli bir sayı kadar kaydırarak oluşturulur. Örn; DEF, metinini -3 (geriye doğru) kere kaydırarak ABC şifrelenmiş metinini oluştururuz. 3 kere geri alarakta abc orjinal metini tekrar bulabiliriz.
- Alfabe boyutu kadar deneme yanılma yoluyla şifreli metin çok kolay bir şekilde bulunabilir.
- C programlama dili C11 standartlarında UTF-8 özelliğini kazandığından ve kullanımı berbat olduğundan ingiliz alfabesi üzerinden örnek oluşturulmuştur.
- Sezar algoritması genellikle ASCII tablosu kullanarak yapılmaktadır. Bu örnekte kendi alfabemizi oluşturup bu alfabe üzerinden şifreleme yaptık (82 karakterden oluşmaktadır).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
#include <stdio.h>
#include <string.h>
#define limit 500
void sifrele(char[], int);
void sifreCoz(char[], int);
int bul(char[], char);
char metin[limit];
int alfabeBoyutu;
int main() {
//Kendi alfabemizi olusturuyoruz.
char alfabe[] = "abcdefghijklmnoprstuvyz0123456789ABCDEFGHIJKLMNOPRSTUVYZ.,!'^+-/*%&()=?#${[]}~<>| ";
int kaydir = 44;
alfabeBoyutu = strlen(alfabe);
strcpy(metin, "CKAYNAK.com'da konu ANLAtimi, ornek KodLAR ve ALGORiTMAlar BULABiLiRSiNiZ.");
printf("******metinin ilk hali******\n%s\n", metin);
sifrele(alfabe, kaydir);
printf("******metinin sifreli hali******\n%s\n", metin);
sifreCoz(alfabe, kaydir);
printf("******metinin sifre cozulmus hali******\n%s\n", metin);
return 0;
}
void sifrele(char alfabe[], int kaydir) {
int i;
int harfSirasi;
int metinBoyut = strlen(metin);
for (i = 0; i < metinBoyut; i++) {
harfSirasi = bul(alfabe, metin[i]);
if (harfSirasi != -1) {
harfSirasi = (harfSirasi + kaydir) % alfabeBoyutu;
if (harfSirasi < 0)
harfSirasi += alfabeBoyutu;
metin[i] = alfabe[harfSirasi];
}
}
}
void sifreCoz(char alfabe[], int kaydir) {
int i;
int harfSirasi;
int metinBoyut = strlen(metin);
for (i = 0; i < metinBoyut; i++) {
harfSirasi = bul(alfabe, metin[i]);
if (harfSirasi != -1) {
harfSirasi = (harfSirasi - kaydir) % alfabeBoyutu;
if (harfSirasi < 0)
harfSirasi += alfabeBoyutu;
metin[i] = alfabe[harfSirasi];
}
}
}
int bul(char alfabe[], char arananHarf) {
int i, sayac = -1;
for (i = 0; i < strlen(alfabe); i++) {
if (arananHarf == alfabe[i])
sayac = i;
}
return sayac;
}
|
Çıktı:
1
2
3
4
5
6
|
******metinin ilk hali******
CKAYNAK.com'da konu ANLAtimi, ornek KodLAR ve ALGORiTMAlar BULABiLiRSiNiZ.
******metinin sifreli hali******
>f~ri~ftN!.yOLKY!,/K~ig~-U.UuK!^,PYKf!Og~lK*PK~gbjlUnh~ZL^K<og~<UgUlmUiUst
******metinin sifre cozulmus hali******
CKAYNAK.com'da konu ANLAtimi, ornek KodLAR ve ALGORiTMAlar BULABiLiRSiNiZ.
|
- bul fonksiyonu gönderilen harfin, alfabe de kaçıncı sırada olduğunu int olarak geri dönderir.
- sifrele fonksiyonu karakter karakter harfleri kaydırarak şifreler.
- sifreCoz fonksiyonu karakter karakter harfleri geri kaydırarak şifreyi çözer.
NOT: metin dizisi global olarak limit değişkeninin boyu kadar tanımlanmıştır.