From 82824bf4ec19e7f7e4dc5bc69dbc2975b94dbc7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ula=C5=9F?= <36420486+ukis666@users.noreply.github.com> Date: Tue, 17 Mar 2026 01:10:29 +0300 Subject: [PATCH] Revise Caesar cipher app for Linux terminal workflow --- Makefile | 14 ++ README.md | 29 +++- sifreleyicim/sifreleyicim1/sifreleyici.c | 212 +++++++++-------------- 3 files changed, 127 insertions(+), 128 deletions(-) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..a952fbf --- /dev/null +++ b/Makefile @@ -0,0 +1,14 @@ +CC = gcc +CFLAGS = -Wall -Wextra -pedantic -std=c11 +TARGET = sifreleyici +SRC = sifreleyicim/sifreleyicim1/sifreleyici.c + +all: $(TARGET) + +$(TARGET): $(SRC) + $(CC) $(CFLAGS) -o $(TARGET) $(SRC) + +clean: + rm -f $(TARGET) + +.PHONY: all clean diff --git a/README.md b/README.md index 2165725..c775a0c 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,29 @@ # Ceasar_Cipher_Decoder_and_Encoder - Program that encrypts and decrypts texts according to the Caesar Cipher algorithm + +Linux terminalinde çalışan Caesar Cipher (şifreleme/çözme) uygulaması. + +## Özellikler + +- Tamamen terminal tabanlı akış (Linux uyumlu) +- Metni direkt konsoldan alır (zorunlu dosya bağımlılığı yok) +- Encode için pozitif/negatif/büyük kaydırma desteği +- Decode için 26 olası varyantı listeler +- Büyük-küçük harf korunur, harf dışı karakterler aynen bırakılır + +## Derleme + +```bash +make +``` + +Alternatif olarak doğrudan GCC: + +```bash +gcc -Wall -Wextra -pedantic -std=c11 -o sifreleyici sifreleyicim/sifreleyicim1/sifreleyici.c +``` + +## Çalıştırma + +```bash +./sifreleyici +``` diff --git a/sifreleyicim/sifreleyicim1/sifreleyici.c b/sifreleyicim/sifreleyicim1/sifreleyici.c index 64e61a7..a5b53fa 100644 --- a/sifreleyicim/sifreleyicim1/sifreleyici.c +++ b/sifreleyicim/sifreleyicim1/sifreleyici.c @@ -1,171 +1,129 @@ -#include +#include #include #include #include #define MAX_UZUNLUK 2000 +#define ALFABE_UZUNLUGU 26 -int can_file_open(FILE* input_file, FILE* output_file) { - if (input_file == NULL || output_file == NULL) { - perror("FILE ERROR"); - - return 1; // hata kodu döndür +int normalize_shift(int kaydirma) { + int normalized = kaydirma % ALFABE_UZUNLUGU; + if (normalized < 0) { + normalized += ALFABE_UZUNLUGU; } - return 0; // başarı + return normalized; } -void Kucuk_Harf_Dizi(char dizi[], FILE* input_file) { - int i = 0, ch; - while ((ch = fgetc(input_file)) != EOF && i < MAX_UZUNLUK - 1) { - dizi[i] = tolower((unsigned char)ch); - i++; +void satir_oku(char dizi[], size_t boyut) { + if (fgets(dizi, (int)boyut, stdin) == NULL) { + dizi[0] = '\0'; + return; } - dizi[i] = '\0'; + size_t len = strlen(dizi); + if (len > 0 && dizi[len - 1] == '\n') { + dizi[len - 1] = '\0'; + } } -void sifreleyici(int kaydirma, char kucultulmus_dizi[], FILE* output_file) { - char sifrelenmis_dizi[MAX_UZUNLUK] = {0}; - int index = 0; - - for (int i = 0; i < (int)strlen(kucultulmus_dizi); i++) { - char anlik_karakter = kucultulmus_dizi[i]; - if (isalpha(anlik_karakter)) { - char sifrelenmis_karakter = 'a' + (anlik_karakter - 'a' + kaydirma) % 26; - sifrelenmis_dizi[index++] = sifrelenmis_karakter; - } else { - sifrelenmis_dizi[index++] = anlik_karakter; - } +char kaydir_char(char c, int shift) { + if (c >= 'a' && c <= 'z') { + return (char)('a' + (c - 'a' + shift) % ALFABE_UZUNLUGU); } - - sifrelenmis_dizi[index] = '\0'; - fprintf(output_file, "%s", sifrelenmis_dizi); + if (c >= 'A' && c <= 'Z') { + return (char)('A' + (c - 'A' + shift) % ALFABE_UZUNLUGU); + } + return c; } -void sifre_Coz(char dizi[MAX_UZUNLUK], FILE* outputFile) { - char cozulmus_var[2 * MAX_UZUNLUK] = {0}; +void sifrele_metin(const char metin[], int kaydirma, char cikti[]) { + int shift = normalize_shift(kaydirma); - for (int kaydirma = 0; kaydirma <= 255; kaydirma++) { - int varIndex = 0; + for (int i = 0; metin[i] != '\0'; i++) { + cikti[i] = kaydir_char(metin[i], shift); + } - for (int i = 0; i < (int)strlen(dizi); i++) { - char anlik_karakter = dizi[i]; + cikti[strlen(metin)] = '\0'; +} - if (isalpha(anlik_karakter)) { - char cozulmus_karakter = 'a' + ((anlik_karakter - 'a' - kaydirma + 26) % 26); - cozulmus_var[varIndex++] = cozulmus_karakter; - } else { - cozulmus_var[varIndex++] = anlik_karakter; - } - } +void tum_cozumleri_yazdir(const char metin[]) { + char gecici[MAX_UZUNLUK]; - cozulmus_var[varIndex] = '\0'; + for (int kaydirma = 0; kaydirma < ALFABE_UZUNLUGU; kaydirma++) { + for (int i = 0; metin[i] != '\0'; i++) { + gecici[i] = kaydir_char(metin[i], ALFABE_UZUNLUGU - kaydirma); + } + gecici[strlen(metin)] = '\0'; - fprintf(outputFile, "\n*************************\n"); - fprintf(outputFile, "VARIANT %d: %s", kaydirma, cozulmus_var); - fprintf(outputFile, "\n*************************\n"); + printf("[%2d] %s\n", kaydirma, gecici); } } -int main() { - int secim = 0; +int sayi_oku(const char* prompt, int* sonuc) { + char satir[64]; -ana_menu: - printf("Hello, what do you want to do?\n1) DECODE\n2) ENCODE\n-> "); - scanf("%d", &secim); + printf("%s", prompt); + satir_oku(satir, sizeof(satir)); - if (secim == 2) { - char kucultulmus_dizi[MAX_UZUNLUK]; - int kaydirma = 0; + char* endptr = NULL; + long deger = strtol(satir, &endptr, 10); - FILE* input_file = fopen("sifreli_text.txt", "w"); - FILE* output_file = fopen("sifresiz_text.txt", "r"); - if (can_file_open(output_file, input_file)) { - // Dosya açılamadıysa programı sonlandırıyoruz - return 1; - } + if (satir[0] == '\0' || (endptr != NULL && *endptr != '\0')) { + return 0; + } - system("clear"); // Linux'ta ekran temizleme - printf("DON'T FORGET TO SAVE\n"); + *sonuc = (int)deger; + return 1; +} - // Linux'ta metin dosyası açmak için (Varsayılan program) xdg-open kullanabilirsiniz: - system("xdg-open sifresiz_text.txt"); +void menu_yazdir(void) { + printf("\n=== Caesar Cipher (Linux CLI) ===\n"); + printf("1) Encode\n"); + printf("2) Decode (all 26 variants)\n"); + printf("0) Exit\n"); + printf("Secim: "); +} - system("clear"); - printf("Enter how many shifts you want (enter -1 to see the encryption table): "); - scanf("%d", &kaydirma); +int main(void) { + char metin[MAX_UZUNLUK]; + char cikti[MAX_UZUNLUK]; - if (kaydirma == -1) { - system("clear"); - // Örnek tablo - printf("1- A->B 2- A->C 3- A->D 4- A->E 5- A->F 6- A->G\n"); - printf("...\n25- A->Z\n\n\n"); - goto ana_menu; - } + while (1) { + int secim = -1; + menu_yazdir(); - Kucuk_Harf_Dizi(kucultulmus_dizi, output_file); - sifreleyici(kaydirma, kucultulmus_dizi, input_file); - fclose(input_file); - - FILE* bakma = fopen("sifreli_text.txt", "r"); - system("clear"); - printf("ENCRYPTED FILE\n"); - system("xdg-open sifreli_text.txt"); - if (bakma) fclose(bakma); - fclose(output_file); - system("clear"); - - // Dosyaları kapatıp sıfırlamak için tekrar aç - FILE* input_file_silme = fopen("sifreli_text.txt", "w"); - FILE* output_file_silme = fopen("sifresiz_text.txt", "w"); - if (input_file_silme) { - fprintf(input_file_silme, " "); - fclose(input_file_silme); - } - if (output_file_silme) { - fprintf(output_file_silme, " "); - fclose(output_file_silme); + if (!sayi_oku("", &secim)) { + printf("Gecersiz secim.\n"); + continue; } - goto ana_menu; - } - else if (secim == 1) { - char kucultulmus_dizi[MAX_UZUNLUK]; - FILE* input_file = fopen("sifreli_text.txt", "r"); - FILE* output_file = fopen("sifresiz_text.txt", "w"); - if (can_file_open(input_file, output_file)) { - return 1; + if (secim == 0) { + printf("Cikis yapildi.\n"); + break; } - system("clear"); - printf("DON'T FORGET TO SAVE\n"); - system("xdg-open sifreli_text.txt"); + if (secim == 1) { + int kaydirma; - Kucuk_Harf_Dizi(kucultulmus_dizi, input_file); - sifre_Coz(kucultulmus_dizi, output_file); - fclose(output_file); + printf("Metni girin: "); + satir_oku(metin, sizeof(metin)); - system("clear"); - printf("CRACKED TEXT\n"); - system("xdg-open sifresiz_text.txt"); - - fclose(input_file); - - system("clear"); + if (!sayi_oku("Kaydirma miktari: ", &kaydirma)) { + printf("Gecersiz kaydirma degeri.\n"); + continue; + } - // Dosyaları kapatıp sıfırlamak için tekrar aç - FILE* input_file_silme = fopen("sifreli_text.txt", "w"); - FILE* output_file_silme = fopen("sifresiz_text.txt", "w"); - if (input_file_silme) { - fprintf(input_file_silme, " "); - fclose(input_file_silme); + sifrele_metin(metin, kaydirma, cikti); + printf("Sifreli metin: %s\n", cikti); } - if (output_file_silme) { - fprintf(output_file_silme, " "); - fclose(output_file_silme); + else if (secim == 2) { + printf("Sifreli metni girin: "); + satir_oku(metin, sizeof(metin)); + tum_cozumleri_yazdir(metin); + } + else { + printf("Bilinmeyen secim.\n"); } - - goto ana_menu; } return 0;