tdulik

Substituční šifra

Aug 25th, 2016
127
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <stdbool.h>
  5. void generujSifru(char tabulka[256])
  6. {
  7.     int i;
  8.     for(i = 0; i <= 255; i++) {
  9.         tabulka[i] = 255 - i;
  10.     }
  11. }
  12. void generujNahodnouSifru(char tabulka[256], char desifrovaciTabulka[256])
  13. {
  14.     time_t t;
  15.     srand((unsigned)time(&t));
  16.  
  17.     bool mnozina[256];
  18.     int i;
  19.     for(i = 0; i <= 255; i++)
  20.         mnozina[i] = false;
  21.     for(i = 0; i <= 255; i++) {
  22.         int nahodnyZnak = rand() % 256;
  23.         if(mnozina[nahodnyZnak] == true) {
  24.             int j;
  25.             for(j = (nahodnyZnak + 1) % 256; j != nahodnyZnak; j = (j + 1) % 256)
  26.                 if(mnozina[j] == false)
  27.                     break; // nasli jsme!!!
  28.             nahodnyZnak = j;
  29.         }
  30.         mnozina[nahodnyZnak] = true;
  31.         tabulka[i] = nahodnyZnak;
  32.         desifrovaciTabulka[nahodnyZnak] = i;
  33.     }
  34. }
  35. char* sifruj(char retezec[], char tabulka[])
  36. {
  37.     int i = 0;
  38.     while(retezec[i] != 0) {
  39.         int znak = (unsigned char)retezec[i];
  40.         retezec[i] = tabulka[znak];
  41.         i++;
  42.     }
  43.     return retezec;
  44. }
  45. int main(int argc, char** argv)
  46. {
  47.     char tabulka[256], desifrovaciTabulka[256];
  48.     char vstup[256] = "Ahoj Pavle...";
  49.  
  50.     /** 1. parametr>
  51.      * -r :cteni klicu ze zadanych souboru
  52.      * -w : generovani a zapis klicu do zadanych souboru
  53.      * 2. a 3. parametr: jmena souboru s klicem
  54.      * Na standardni vstup vlozite soubor
  55.      * Na standardni vystup vypiste (de)sifrovany vysledek
  56.      */
  57.  
  58.     if(argc > 1) {
  59.         if(argv[1][1] == 'r') {
  60.             // cteni
  61.             puts("cteni");          
  62.         }
  63.         else if(argv[1][1] == 'w') {
  64.             puts("zapis");
  65.         }
  66.         //nezapomente na konci zavrit soubory pomoci
  67.         // fclose(soubor);
  68.     }
  69.  
  70.     printf("Sifrujeme retezec: '%s'\n", vstup);
  71.     generujNahodnouSifru(tabulka, desifrovaciTabulka);
  72.     printf("Sifruj=%s\n", sifruj(vstup, tabulka));
  73.     printf("Desifruj=%s\n", sifruj(vstup, desifrovaciTabulka));
  74.     return 0;
  75. }
RAW Paste Data