-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.c
141 lines (117 loc) · 4.81 KB
/
main.c
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void sifrele(char *girdi, char *cikti) {
FILE *girdiDosyasi, *ciktiDosyasi;
char karakter;
// Girdi dosyasini okuma modunda aciyor
girdiDosyasi = fopen(girdi, "r");
if (girdiDosyasi == NULL) {
perror("Girdi dosyasini acma hatasi");
exit(EXIT_FAILURE);
}
// Cikti dosyasini ise yazma moduna aciyor
ciktiDosyasi = fopen(cikti, "w");
if (ciktiDosyasi == NULL) {
perror("Cikti dosyasini acma hatasi");
fclose(girdiDosyasi);
exit(EXIT_FAILURE);
}
// Girdi dosyasini sonuna kadar okuyacak
while ((karakter = fgetc(girdiDosyasi)) != EOF) {
// Kucuk harf ise sifreleyecek
if ('a' <= karakter && karakter <= 'z') {
karakter = 'a' + (karakter - 'a' + 3) % 26; // Sabit anahtar 3
// Sifreleme islemi yapilir: 'a' + (karakter - 'a' + 3) % 26 ile 3 basamak kaydirma yapilir.
// 'a' harfinin ASCII degeri 97'ye esit oldugu için, (karakter - 'a') ifadesi,
// aslinda karakterin alfabedeki konumunu temsil eder.
// Sonra 3 eklenir (sabit anahtarimiz), ve 26'ya mod alinir.
// Son olarak, 'a' eklenerek sifrelenmis harf elde edilir.
}
// Buyuk harf ise sifreleyecek
else if ('A' <= karakter && karakter <= 'Z') {
karakter = 'A' + (karakter - 'A' + 3) % 26; // Sabit anahtar 3
// Sifreleme islemi yapilir: (karakter - 'A' + 3) % 26 ile 3 basamak kaydirma yapilir.
// Kucuk harfi sifreleme isleminden tek farki 'A' nin ASCII degerinin 65 olmasi, islemler tamamen ayni.
}
// Sifrelenmis karakteri (texti) cikti dosyasina yaziyor
fputc(karakter, ciktiDosyasi);
}
// Dosyalari kapatiyor
fclose(girdiDosyasi);
fclose(ciktiDosyasi);
}
void coz(char *girdi, char *cikti) {
FILE *girdiDosyasi, *ciktiDosyasi;
char karakter;
// Girdi dosyasini okuma modunda aciyor
girdiDosyasi = fopen(girdi, "r");
if (girdiDosyasi == NULL) {
perror("Girdi dosyasini acma hatasi");
exit(EXIT_FAILURE);
}
// Cikti dosyasini ise yazma modunda aciyor
ciktiDosyasi = fopen(cikti, "w");
if (ciktiDosyasi == NULL) {
perror("Cikti dosyasini acma hatasi");
fclose(girdiDosyasi);
exit(EXIT_FAILURE);
}
// Girdi dosyasini sonuna kadar okuyacak
while ((karakter = fgetc(girdiDosyasi)) != EOF) {
// Kucuk harf ise sifreyi cozecek
if ('a' <= karakter && karakter <= 'z') {
karakter = 'a' + (karakter - 'a' - 3 + 26) % 26; // Sabit anahtar 3
// Sifreleme islemi yapilir: 'a' + (karakter - 'a' - 3 + 26) % 26 ile 3 basamak geri kaydirma yapilir.
// Islemin 0 dan kucuk cikmamasi icin +26 ekledik geri kalan mantik benzer,
// a'nin ASCII degeri 97, karakterden a'yi cikarip - 3 daha yapiyoruz (3 basamak geri gidelim diye).
// Mod 26 alip sifreli harfi cozup sifrelenmemis haline dondurmus oluyoruz.
}
// Buyuk harf ise sifreyi cozecek
else if ('A' <= karakter && karakter <= 'Z') {
karakter = 'A' + (karakter - 'A' - 3 + 26) % 26; // Sabit anahtar 3
// Sifreleme islemi yapilir: 'A' + (karakter - 'a' - 3 + 26) % 26 ile 3 basamak geri kaydirma yapilir.
// kucuk harfi cozme ile ayni islemler A'nin ASCII degeri 65 tek fark bu.
}
// Çozulmus karakteri cikti dosyasina yazacak
fputc(karakter, ciktiDosyasi);
}
// Dosyalari kapat
fclose(girdiDosyasi);
fclose(ciktiDosyasi);
}
int main() {
int secim;
char girdiDosyaAdi[100], ciktiDosyaAdi[100];
// Kullaniciya arayuzu gosteriyor ve gerekli verileri aliyoruz
printf("Metin Sifreleyici/Cozucu\n");
printf("Bir secim yapin:\n");
printf("1. Sifrele\n");
printf("2. Coz\n");
printf("Seciminiz: ");
// Kullanicinin secimini aliyoruz
if (scanf("%d", &secim) != 1 || (secim != 1 && secim != 2)) {
printf("Gecersiz secim. Lutfen sadece 1 veya 2 giriniz.\n");
exit(0);
}
// Girdi ve cikti dosya adlarini aldik
printf("Girdi dosya adini girin: ");
scanf("%s", girdiDosyaAdi);
printf("Cikti dosya adini girin: ");
scanf("%s", ciktiDosyaAdi);
// Kullanicinin secimine gore islem sonucu
switch (secim) {
case 1:
sifrele(girdiDosyaAdi, ciktiDosyaAdi);
printf("Sifreleme tamamlandi.\n");
break;
case 2:
coz(girdiDosyaAdi, ciktiDosyaAdi);
printf("Cozme tamamlandi.\n");
break;
default:
printf("Gecersiz secim.\n");
break;
}
return 0;
}