Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <windows.h>
- #include <ctype.h>
- #define N 40
- void szyfrowanie_cez(char tab[], int klucz)
- {
- int dl;
- int i;
- dl = strlen(tab);
- for(i=0; i<N; i++)
- tab[i] = toupper(tab[i]);
- if(klucz>0)
- {
- klucz = klucz%26;
- for(i=0; i<=dl; i++)
- {
- if(tab[i]>=65 && tab[i]<=90)
- {
- if((tab[i]+klucz)<=90)
- tab[i]=tab[i]+klucz;
- else
- tab[i] = tab[i]+klucz-26;
- }
- }
- }
- else
- return;
- }
- void deszyfrowanie_cez(char tab[], int klucz)
- {
- int dl;
- int i;
- dl = strlen(tab);
- for(int i=0; i<N; i++)
- tab[i] = toupper(tab[i]);
- if(klucz>0)
- {
- for(i=0; i<=dl; i++)
- {
- if(tab[i]>=65 && tab[i]<=90)
- {
- if(tab[i]-klucz>=65)
- tab[i]=tab[i]-klucz;
- else
- tab[i]= tab[i]-klucz+26;
- }
- }
- }
- else
- return;
- }
- void vigenere(char wiadomosc[], char klucz[])
- {
- int ans;
- int i, j;
- int dlWiadomosc = strlen(wiadomosc);
- int dlKlucz = strlen(klucz);
- char nowyKlucz[dlWiadomosc];
- for (i=0; i<N; i++)
- {
- wiadomosc[i] = toupper(wiadomosc[i]);
- klucz[i] = toupper(klucz[i]);
- }
- ///generowanie nowego klucza, gdy wyraz szyfrowany jest dluzszy od klucza
- for(i=0, j=0; i<dlWiadomosc; i++, j++)
- {
- if(j == dlKlucz)
- j = 0;
- nowyKlucz[i] = klucz[j];
- }
- nowyKlucz[i] = NULL;
- printf("Co chcesz zrobic z podanym wyrazem?\n 1. Zaszyfrowac\n 2. Odszyfrowac\n");
- scanf("%d", &ans);
- system("cls");
- if (ans == 1) //szyfrowanie
- {
- printf("Slowo przed szyfrowaniem: %s\n", wiadomosc);
- for(i = 0; i < dlWiadomosc; i++)
- {
- if(wiadomosc[i]==' ')
- continue;
- wiadomosc[i] = ((wiadomosc[i] + nowyKlucz[i]) % 26) + 'A';
- }
- wiadomosc[i] = NULL;
- printf("Klucz: %s\n", klucz);
- printf("Slowo po odszyfrowaniu: %s\n", wiadomosc);
- }
- else if (ans == 2) //deszyfrowanie
- {
- printf("Slowo przed szyfrowaniem: %s\n", wiadomosc);
- for(i = 0; i < dlWiadomosc; ++i)
- {
- if(wiadomosc[i]==' ')
- continue;
- wiadomosc[i] = (((wiadomosc[i] - nowyKlucz[i]) + 26) % 26) + 'A';
- }
- wiadomosc[i] = NULL;
- printf("Klucz: %s\n", klucz);
- printf("Slowo po odszyfrowaniu: %s\n", wiadomosc);
- }
- else
- printf("Niepoprawny wybor\n");
- }
- void wprowadz_wiadomosc(char wiadomosc[])
- {
- printf("Podaj wyraz: ");
- scanf("%[^\n]s", wiadomosc);
- for(int i=0; i<N; i++)
- {
- wiadomosc[i] = toupper(wiadomosc[i]);
- }
- }
- void menu(char wiadomosc[])
- {
- int odp;
- int klucz_cez;
- int ans_cez;
- char klucz_vig[20];
- while(odp!=0){
- printf("Co chcesz zrobic:\n 1. Uzyc szyfru Cezara\n 2. Uzyc szyfru Vigenere'a\n 0. Zakonczyc dzialanie programu\n");
- scanf("%d", &odp);
- system("cls");
- if (odp==1)
- {
- printf("Podaj klucz: ");
- scanf("%d", &klucz_cez);
- printf("Co chcesz zrobic z podanym wyrazem?\n 1. Zaszyfrowac\n 2. Odszyfrowac\n");
- scanf("%d", &ans_cez);
- system("cls");
- printf("Podane wyrazenie do zaszyfrowania: %s\n", wiadomosc);
- if (ans_cez == 1)
- {
- szyfrowanie_cez(wiadomosc, klucz_cez);
- }
- else if (ans_cez == 2)
- {
- deszyfrowanie_cez(wiadomosc, klucz_cez);
- }
- else
- {
- puts("Niepoprawny wybor!");
- // menu(wiadomosc);
- // return;
- }
- printf("Klucz: %d\n", klucz_cez);
- printf("Zaszyfrowane wyrazenie: %s \n", wiadomosc);
- puts("");
- //menu(wiadomosc);
- }
- else if(odp == 2)
- {
- printf("Podaj klucz: \n");
- scanf("%s", klucz_vig);
- vigenere(wiadomosc, klucz_vig);
- puts("");
- //menu(wiadomosc);
- }
- else if(odp ==0)
- {
- system("cls");
- return;
- }
- else
- puts("Niepoprawny wybor");
- }
- }
- int main()
- {
- char wiadomosc[N];
- printf("...:: SZYFR CEZARA I VIGENERE'A ::...\n\n");
- wprowadz_wiadomosc(wiadomosc);
- menu(wiadomosc);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement