Advertisement
Guest User

Untitled

a guest
Jun 24th, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.51 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <windows.h>
  5. #include <ctype.h>
  6. #define N 40
  7.  
  8. void szyfrowanie_cez(char tab[], int klucz)
  9. {
  10.     int dl;
  11.     int i;
  12.     dl = strlen(tab);
  13.     for(i=0; i<N; i++)
  14.         tab[i] = toupper(tab[i]);
  15.  
  16.     if(klucz>0)
  17.     {
  18.         klucz = klucz%26;
  19.         for(i=0; i<=dl; i++)
  20.         {
  21.             if(tab[i]>=65 && tab[i]<=90)
  22.             {
  23.                 if((tab[i]+klucz)<=90)
  24.                     tab[i]=tab[i]+klucz;
  25.                 else
  26.                     tab[i] = tab[i]+klucz-26;      
  27.             }
  28.         }
  29.     }
  30.     else
  31.         return;
  32. }
  33.  
  34. void deszyfrowanie_cez(char tab[], int klucz)
  35. {
  36.     int dl;
  37.     int i;
  38.     dl = strlen(tab);
  39.     for(int i=0; i<N; i++)
  40.         tab[i] = toupper(tab[i]);
  41.  
  42.     if(klucz>0)
  43.     {
  44.         for(i=0; i<=dl; i++)
  45.         {
  46.             if(tab[i]>=65 && tab[i]<=90)
  47.             {
  48.  
  49.                 if(tab[i]-klucz>=65)
  50.                     tab[i]=tab[i]-klucz;
  51.                 else
  52.                     tab[i]= tab[i]-klucz+26;
  53.             }
  54.         }
  55.     }
  56.     else
  57.         return;
  58. }
  59.  
  60. void vigenere(char wiadomosc[], char klucz[])
  61. {
  62.     int ans;
  63.     int i, j;
  64.     int dlWiadomosc = strlen(wiadomosc);
  65.     int dlKlucz = strlen(klucz);
  66.     char nowyKlucz[dlWiadomosc];
  67.  
  68.     for (i=0; i<N; i++)
  69.     {
  70.         wiadomosc[i] = toupper(wiadomosc[i]);
  71.         klucz[i] = toupper(klucz[i]);
  72.     }
  73.     ///generowanie nowego klucza, gdy wyraz szyfrowany jest dluzszy od klucza
  74.     for(i=0, j=0; i<dlWiadomosc; i++, j++)
  75.     {
  76.         if(j == dlKlucz)
  77.             j = 0;
  78.         nowyKlucz[i] = klucz[j];
  79.     }
  80.     nowyKlucz[i] = NULL;
  81.  
  82.     printf("Co chcesz zrobic z podanym wyrazem?\n   1. Zaszyfrowac\n   2. Odszyfrowac\n");
  83.     scanf("%d", &ans);
  84.     system("cls");
  85.  
  86.     if (ans == 1) //szyfrowanie
  87.     {
  88.         printf("Slowo przed szyfrowaniem: %s\n", wiadomosc);
  89.         for(i = 0; i < dlWiadomosc; i++)
  90.         {
  91.             if(wiadomosc[i]==' ')
  92.                 continue;
  93.             wiadomosc[i] = ((wiadomosc[i] + nowyKlucz[i]) % 26) + 'A';
  94.  
  95.         }
  96.         wiadomosc[i] = NULL;
  97.  
  98.         printf("Klucz: %s\n", klucz);
  99.         printf("Slowo po odszyfrowaniu: %s\n", wiadomosc);
  100.  
  101.     }
  102.     else if (ans == 2) //deszyfrowanie
  103.     {
  104.         printf("Slowo przed szyfrowaniem: %s\n", wiadomosc);
  105.         for(i = 0; i < dlWiadomosc; ++i)
  106.         {
  107.             if(wiadomosc[i]==' ')
  108.                 continue;
  109.             wiadomosc[i] = (((wiadomosc[i] - nowyKlucz[i]) + 26) % 26) + 'A';
  110.         }
  111.         wiadomosc[i] = NULL;
  112.         printf("Klucz: %s\n", klucz);
  113.         printf("Slowo po odszyfrowaniu: %s\n", wiadomosc);
  114.     }
  115.     else
  116.         printf("Niepoprawny wybor\n");
  117. }
  118.  
  119. void wprowadz_wiadomosc(char wiadomosc[])
  120. {
  121.     printf("Podaj wyraz: ");
  122.     scanf("%[^\n]s", wiadomosc);
  123.  
  124.     for(int i=0; i<N; i++)
  125.     {
  126.         wiadomosc[i] = toupper(wiadomosc[i]);
  127.     }
  128. }
  129.  
  130. void menu(char wiadomosc[])
  131. {
  132.     int odp;
  133.     int klucz_cez;
  134.     int ans_cez;
  135.     char klucz_vig[20];
  136.  
  137.     while(odp!=0){
  138.     printf("Co chcesz zrobic:\n 1. Uzyc szyfru Cezara\n 2. Uzyc szyfru Vigenere'a\n 0. Zakonczyc dzialanie programu\n");
  139.     scanf("%d", &odp);
  140.     system("cls");
  141.  
  142.     if (odp==1)
  143.     {
  144.         printf("Podaj klucz: ");
  145.         scanf("%d", &klucz_cez);
  146.         printf("Co chcesz zrobic z podanym wyrazem?\n   1. Zaszyfrowac\n   2. Odszyfrowac\n");
  147.         scanf("%d", &ans_cez);
  148.         system("cls");
  149.         printf("Podane wyrazenie do zaszyfrowania: %s\n", wiadomosc);
  150.         if (ans_cez == 1)
  151.         {
  152.             szyfrowanie_cez(wiadomosc, klucz_cez);
  153.         }
  154.         else if (ans_cez == 2)
  155.         {
  156.             deszyfrowanie_cez(wiadomosc, klucz_cez);
  157.         }
  158.         else
  159.         {
  160.             puts("Niepoprawny wybor!");
  161.           //  menu(wiadomosc);
  162.            // return;
  163.         }
  164.         printf("Klucz: %d\n", klucz_cez);
  165.         printf("Zaszyfrowane wyrazenie: %s \n", wiadomosc);
  166.         puts("");
  167.         //menu(wiadomosc);
  168.     }
  169.     else if(odp == 2)
  170.     {
  171.         printf("Podaj klucz: \n");
  172.         scanf("%s", klucz_vig);
  173.         vigenere(wiadomosc, klucz_vig);
  174.         puts("");
  175.         //menu(wiadomosc);
  176.     }
  177.     else if(odp ==0)
  178.     {
  179.         system("cls");
  180.         return;
  181.     }
  182.     else
  183.         puts("Niepoprawny wybor");
  184.     }
  185. }
  186.  
  187. int main()
  188. {
  189.     char wiadomosc[N];
  190.  
  191.     printf("...:: SZYFR CEZARA I VIGENERE'A ::...\n\n");
  192.     wprowadz_wiadomosc(wiadomosc);
  193.     menu(wiadomosc);
  194.     return 0;
  195. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement