Advertisement
Guest User

Programma criptaggio cmc

a guest
Nov 18th, 2019
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.03 KB | None | 0 0
  1. //NOME: CARLO MARIA
  2. //COGNOME: CASINI
  3. //MATRICOLA:324995
  4. #include <stdio.h>
  5. #include <string.h>
  6. #include <stdlib.h>
  7. void cifrario_cesare(char alfabeto[30]) {
  8.   int chiave_ces=0;      //definisco e chiedo la chiave di criptaggio
  9.   char fraseChiaro[256]; //definisco la stringa per la frase in chiaro
  10.   char fraseCript[256];  //definisco la stringa per la frase criptata
  11.   int carattereCript=0;
  12. printf("cifrario di cesare\n");
  13.  
  14.  
  15.  
  16.   do {                  //con questo do controllo se il valore che mi verrà fornito sia maggiore di 0
  17.       printf("dammi la chiave di criptaggio (valore intero positivo, minore di 26 e maggiore di 0)\n");
  18.       scanf("%d", &chiave_ces);
  19.       if (chiave_ces<=0) {
  20.         printf("il valore fornito è minore o uguale a 0!\n");
  21.       } else if (chiave_ces>=26) {
  22.                 printf("il valore fornito è maggiore o uguale a 26, nel caso sia solo maggiore verrà ricondotto ad il valore accettabile corrispondente, nel caso sia =0 le verrà chiesto di riinserire il valore.\n");
  23.                 while (chiave_ces>=26) {    //questo loop mi permette di prendere il valore della chiave all'interno del range dei valori accettabili attraverso una sottrazione ripetuta senza che l'utente lo debba riimmettere
  24.                   chiave_ces=chiave_ces-26;
  25.                 }
  26.                 printf("il valore che verra preso in considerazione della chiave è questo --> %d\n", chiave_ces);
  27.       }
  28.   } while(chiave_ces<=0);
  29.  
  30.  
  31.  
  32.  
  33.  
  34. printf("ora dammi la frase in chiaro (solo minuscole, le maiuscole e i numeri non verranno criptati)\n");
  35. while (getc(stdin)!='\n') {
  36. }
  37. fgets(fraseChiaro, sizeof(fraseChiaro), stdin);
  38. printf("ecco la tua frase in chiaro '%s' \n", fraseChiaro);
  39. printf("ecco cosa c'e' in fraseCript '%s' \n", fraseCript);
  40. for (int i = 0; i < sizeof(fraseChiaro) ; i++) {    //inizio il ciclo for che mi permette di scorrere la stringa, ho messo come condizione necessaria che la stringa sia diversa dal carattere null
  41.   fraseCript[i]=fraseChiaro[i];                 //con questa riga di condice, nell'eventualità che nella stringa ci siano valori diffrenti da quelli prestabiliti essi rimangono tali anche nella stringa criptata
  42.   for (int j = 0; j < 26; j++) {                //con questo for controllo che l'elemento nella stringa sia uno dei contemplati dall'algoritmo di criptaggio confrontandolo con la stringa alfabeto contenente tutti i caratteri che il programma cripta.
  43.     if (fraseChiaro[i]==alfabeto[j]) {          //con questo if controllo se l'elemento di fraseChiaro[i] sia un elemento da criptare oppure no
  44.       carattereCript=j+chiave_ces;              //per evitare di fare calcoli all'interno delle [] del vettore ho vuluto utilizzare una variabile ausiliaria che prenda il valore dell'indice della lettera criptata
  45.         while (carattereCript>=26) {            //questo ciclo while mi permette di
  46.           carattereCript=carattereCript-26;
  47.         }
  48.       fraseCript[i]=alfabeto[carattereCript];
  49.     }
  50.   }
  51.  
  52. }
  53. printf("ecco la frase criptata \n");
  54. printf("%s\n", fraseCript);
  55. }
  56.  
  57.  
  58. void cifrario_sost(char alfabetoSTD[30]){
  59.   char alfabetoUSR[27];
  60.   char fraseChiaro[256];
  61.   char fraseCript[256];
  62.   int  lettere_controllo=0, occorrenze=0;
  63.   printf("cifrario a sostituzione \n");
  64.   printf("\n");
  65. do {
  66.   if(lettere_controllo!=0 || occorrenze!=0){
  67.     lettere_controllo=0;
  68.     occorrenze=0;
  69.   }
  70.   printf("ora dammi l'alfabeto mescolato\n");
  71.   printf("ATTENZIONE L'ALFABETO MESCOLATO DEVE CONTENERE SOLO LETTERE MINUSCOLE, NO NUMERI NE MAIUSCOLE NE PUNTEGGIATURA O CARATTERI SPECIALI, E PGNI CARATTERE DEVE ESSERE USATO UNA SOLA VOLTA!! \n");
  72.   printf("NOTARE CHE L'ALFABETO CONTIENE 26 LETTERE, DUNQUE QUALUNQUE CARATTERE CHE VENGA INSERITO OLTRE IL 26esimo NON SARÀ CONTEGGIATO!!\n");
  73.   while (getc(stdin)!='\n') {                                   //|qui
  74.   }                                                             //|prendo
  75.   fgets(alfabetoUSR, sizeof(alfabetoUSR), stdin);               //|l'imput
  76.  
  77.  
  78.   for(char c='a'; (occorrenze<=1 && c<='z'); c++){              //con questi for controllo che :
  79.     occorrenze=0;                                               //1) ogni elemento minuscolo è presente nell'alfabetoUSR
  80.     for (int i = 0; (occorrenze<=1 && i<26); i++) {             //2) in esso ogni elemento si ripeta una volta sola
  81.       if(c==alfabetoUSR[i]){                                    //
  82.         lettere_controllo++;                                    //
  83.         occorrenze++;                                           //
  84.       }
  85.     }
  86.   }
  87.   printf("ecco il contenuto di lettere_controllo furoi dai cicli for= %d\n", lettere_controllo);
  88. } while(lettere_controllo!=26);
  89. printf("ora dammi la frase in chiaro: nota bene che solo i caratteri in minuscoloverrano criptati e non numeri, punti, spazi e maiuscole.\n");
  90.   while (getc(stdin)!='\n') {
  91.   }
  92.   fgets(fraseChiaro, sizeof(fraseChiaro), stdin);
  93.   printf("ecco la tua frase in chiaro '%s' \n", fraseChiaro);
  94.    for (int i = 0; i < sizeof(fraseChiaro); i++) {
  95.     fraseCript[i]=fraseChiaro[i];
  96.     for(int j=0; j<26; j++){
  97.       if (alfabetoSTD[j]==fraseChiaro[i]) {
  98.         fraseCript[i]=alfabetoUSR[j];
  99.       }
  100.     }
  101.    }
  102. printf("ecco la frase criptata '%s' \n", fraseCript);
  103.  
  104. }
  105.  
  106.  
  107. int main() {
  108.   char alfabeto[30] = "abcdefghijklmnopqrstuvwxyz";
  109.   int scelta=0;
  110.   //creo un loop con controllo in fondo per far in modo che se il valore di "scelta" non sia uno dei designati allora esso gli venga richiesto.
  111.   do {
  112.     printf("per prima cosa scegli in quale modo vuoi criptare il tuo messaggio:\n");
  113.     printf("1)cifrario di cesare (input: chiave int, frase in chiaro);\n");
  114.     printf("2)cifrario a sostituzione (input: alfabeto mescolato, frase in chiaro);\n");
  115.     scanf("%d", &scelta);
  116.     printf("hai scelto: %d\n", scelta);
  117.  
  118.     switch (scelta) {
  119.       case 1: cifrario_cesare(alfabeto);
  120.         break;
  121.       case 2: cifrario_sost(alfabeto);
  122.         break;
  123.       default: printf("ATTENZIONE NON È STATA FATTA UNA SCELTA VALIDA, DEVI RIPETERE LA SCELTA!\n");
  124.     }
  125.   } while(scelta!=1 && scelta!=2);
  126.   return 0;
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement