Advertisement
Guest User

Enigma (Macchina Tedesca )

a guest
Feb 17th, 2020
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.79 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <stdio.h>
  4. #include <ctype.h>
  5. using namespace std;
  6. /*
  7.     Titolo : Una macchina Enigma virtuale ( Crittografia Tedesca );
  8.     ///////////////////////////////////////////////////////////////
  9.     Autore : Diego Oprea;
  10.     /////////////////////
  11.     Data Inizio : 25/01/2020
  12.     /////////////////////////
  13.     Problemi :
  14.     ////////////////////////////////////////////////
  15.     Data Completamento : 29/01/2020
  16. */
  17. int main()
  18. {
  19.     // Dichiarazione dei rotori //
  20.     char iniziale[26]  {'Q','W','E','R','T','Z','U','I','O','A','S','D','F','G','H','J','K','P','Y','X','C','V','B','N','M','L'};
  21.     char r_destro [26] [2]      {{'A','Q'},
  22.                                  {'V','W'},
  23.                                  {'O','E'},
  24.                                  {'E','R'},
  25.                                  {'Y','T'},
  26.                                  {'F','Z'},
  27.                                  {'W','U'},
  28.                                  {'L','I'},
  29.                                  {'D','O'},
  30.                                  {'Q','A'},
  31.                                  {'C','S'},
  32.                                  {'B','D'},
  33.                                  {'S','F'},
  34.                                  {'P','G'},
  35.                                  {'T','H'},
  36.                                  {'K','J'},
  37.                                  {'R','K'},
  38.                                  {'G','P'},
  39.                                  {'I','Y'},
  40.                                  {'J','X'},
  41.                                  {'U','C'},
  42.                                  {'H','V'},
  43.                                  {'X','B'},
  44.                                  {'Z','N'},
  45.                                  {'M','M'},
  46.                                  {'N','L'}};
  47.     char r_centro [26] [2]      {{'Y','Q'},
  48.                                  {'U','W'},
  49.                                  {'F','E'},
  50.                                  {'H','R'},
  51.                                  {'X','T'},
  52.                                  {'Z','Z'},
  53.                                  {'M','U'},
  54.                                  {'N','I'},
  55.                                  {'J','O'},
  56.                                  {'G','A'},
  57.                                  {'O','S'},
  58.                                  {'P','D'},
  59.                                  {'A','F'},
  60.                                  {'Q','G'},
  61.                                  {'I','H'},
  62.                                  {'R','J'},
  63.                                  {'L','K'},
  64.                                  {'D','P'},
  65.                                  {'T','Y'},
  66.                                  {'W','X'},
  67.                                  {'V','C'},
  68.                                  {'K','V'},
  69.                                  {'S','B'},
  70.                                  {'B','N'},
  71.                                  {'C','M'},
  72.                                  {'E','L'}};
  73.     char r_sinistro [26] [2]       {{'S','Q'},
  74.                                     {'T','W'},
  75.                                     {'I','E'},
  76.                                     {'O','R'},
  77.                                     {'F','T'},
  78.                                     {'M','Z'},
  79.                                     {'Y','U'},
  80.                                     {'Z','I'},
  81.                                     {'E','O'},
  82.                                     {'Q','A'},
  83.                                     {'D','S'},
  84.                                     {'L','D'},
  85.                                     {'B','F'},
  86.                                     {'C','G'},
  87.                                     {'K','H'},
  88.                                     {'J','J'},
  89.                                     {'G','K'},
  90.                                     {'V','P'},
  91.                                     {'P','Y'},
  92.                                     {'U','X'},
  93.                                     {'R','C'},
  94.                                     {'W','V'},
  95.                                     {'N','B'},
  96.                                     {'X','N'},
  97.                                     {'A','M'},
  98.                                     {'H','L'}};
  99.     char riflettore      [26] [2]  {{'K','Q'},
  100.                                     {'M','W'},
  101.                                     {'I','E'},
  102.                                     {'H','R'},
  103.                                     {'U','T'},
  104.                                     {'G','Z'},
  105.                                     {'T','U'},
  106.                                     {'E','I'},
  107.                                     {'V','O'},
  108.                                     {'J','A'},
  109.                                     {'C','S'},
  110.                                     {'L','D'},
  111.                                     {'X','F'},
  112.                                     {'Z','G'},
  113.                                     {'R','H'},
  114.                                     {'A','J'},
  115.                                     {'Q','K'},
  116.                                     {'N','P'},
  117.                                     {'B','Y'},
  118.                                     {'F','X'},
  119.                                     {'S','C'},
  120.                                     {'O','V'},
  121.                                     {'Y','B'},
  122.                                     {'P','N'},
  123.                                     {'W','M'},
  124.                                     {'D','L'}};
  125.  
  126.     // Variabili //
  127.     string parola;
  128.     int length_parola = 0; // Lunghezza di stringa parola //
  129.     int x=0, a=0, j=0, k=0; // x=posizione lettera vari rotori; a=posizione lettera di parola; j e k = cicli for per shift //
  130.     short int cont_rd = 0, cont_rc = 0;
  131.     bool verifica = false;
  132.     char shift [2];
  133.  
  134.     // Inserimento parola //
  135.     cout<<"Inserisci parola:"<<endl;
  136.     cin >> parola;
  137.     length_parola = parola.length(); // Calcolo lunghezza di stringa parola //
  138.     /*cout<<"Lunghezza parola: " << length_parola <<endl;*/
  139.     for(int v=0;v<length_parola;v++)
  140.     {
  141.         parola[v] = toupper(parola[v]); // carratteri piccoli li fa grandi //
  142.     }
  143.  
  144.     cout<<"messaggio cifrato:"<<endl;
  145.     // Crittografia //
  146.     do{
  147.         /* DA INIZIALE A RIFLETTORE */
  148.         // Trovare posizione parola[a] in rotore iniziale //
  149.         for(x=0;parola[a] != iniziale[x];x++);
  150.  
  151.         // Rotore destro //
  152.         parola[a] = r_destro[x][1]; // Salvataggio parola[a] = alla posizione specchio del rotore iniziale //
  153.         for(x=0;parola[a] != r_destro[x][0];x++);
  154.  
  155.         // Rotore centro //
  156.         parola[a] = r_centro[x][1]; // Salvataggio parola[a] = alla posizione specchio del rotore destro //
  157.         for(x=0;parola[a] != r_centro[x][0];x++);
  158.  
  159.         // Rotore sinisitro //
  160.         parola[a] = r_sinistro[x][1]; // Salvataggio parola[a] = alla posizione specchio del rotore centro //
  161.         for(x=0;parola[a] != r_sinistro[x][0];x++);
  162.  
  163.         // riflettore //
  164.         parola[a] = riflettore[x][1]; // Salvataggio parola[a] = alla posizione specchio del rotore sinistro //
  165.         for(x=0;parola[a] != riflettore[x][0];x++);
  166.  
  167.         /* DA RIFLETTORE A INIZIALE */
  168.         // Rotore sinisitro //
  169.         parola[a] = r_sinistro [x][0]; // Salvataggio parola[a] = alla posizione specchio del rotore riflettore //
  170.         for(x=0;parola[a] != r_sinistro[x][1];x++);
  171.  
  172.         // Rotore centro //
  173.         parola[a] = r_centro[x][0]; // Salvataggio parola[a] = alla posizione specchio del sinistro //
  174.         for(x=0;parola[a] != r_centro[x][1];x++);
  175.  
  176.         // Rotore destro //
  177.         parola[a] = r_destro[x][0]; // Salvataggio parola[a] = alla posizione specchio del rotore centro //
  178.         for(x=0;parola[a] != r_destro[x][1];x++);
  179.  
  180.         // Rotore iniziale //
  181.         parola[a] = iniziale[x]; // Salvataggio parola[a] = alla posizione specchio del rotore destro //
  182.         cout<< parola[a];
  183.  
  184.         /* CAMBIO POSIZIONE MATRICI */
  185.             shift[0]= r_destro[0][0];
  186.             shift[1]= r_destro[0][1];
  187.             for(k=0; k<25; k++)
  188.             {
  189.                 for(j=0; j<2; j++)
  190.                 {
  191.                     r_destro[k][j]=r_destro[k+1][j];
  192.                 }
  193.             }
  194.             r_destro[25][0]=shift[0];
  195.             r_destro[25][1]=shift[1];
  196.             cont_rd++;
  197.  
  198.             if(cont_rd==15 && verifica == false)
  199.             {
  200.                 shift[0]= r_centro[0][0];
  201.                 shift[1]= r_centro[0][1];
  202.                 for(k=0; k<25; k++)
  203.                 {
  204.                     for(j=0; j<2; j++)
  205.                     {
  206.                         r_centro[k][j]=r_centro[k+1][j];
  207.                     }
  208.                 }
  209.                 r_centro[25][0]=shift[0];
  210.                 r_centro[25][1]=shift[1];
  211.                 verifica=true;
  212.                 cont_rc++;
  213.                 cont_rd=0;
  214.             }
  215.             else if(cont_rd==26)
  216.             {
  217.                 shift[0]= r_centro[0][0];
  218.                 shift[1]= r_centro[0][1];
  219.                 for(k=0; k<25; k++)
  220.                 {
  221.                     for(j=0; j<2; j++)
  222.                     {
  223.                         r_centro[k][j]=r_centro[k+1][j];
  224.                     }
  225.                 }
  226.                 r_centro[25][0]=shift[0];
  227.                 r_centro[25][1]=shift[1];
  228.                 cont_rd=0;
  229.                 cont_rc++;
  230.  
  231.             }
  232.             else if(cont_rc==26)
  233.             {
  234.                 shift[0]= r_sinistro[0][0];
  235.                 shift[1]= r_sinistro[0][1];
  236.                 for(k=0; k<25; k++)
  237.                 {
  238.                     for(j=0; j<2; j++)
  239.                     {
  240.                         r_sinistro[k][j]=r_sinistro[k+1][j];
  241.                     }
  242.                 }
  243.                 r_sinistro[25][0]=shift[0];
  244.                 r_sinistro[25][1]=shift[1];
  245.                 cont_rd=0;
  246.                 cont_rc=0;
  247.             };
  248.         a++;
  249.     }while(length_parola-1>=a);
  250. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement