/* Questo programma fa parte di una libreria messa a disposizione dei lettori del libro Alessandro Languasco & Alessandro Zaccagnini, Introduzione alla Crittografia, Ulrico Hoepli Editore, Milano, 2004. Codifica e decodifica di messaggi per mezzo di RSA. Paragrafo 5.9 */ #include #include #include "aritmetica.cc" // L'alfabeto static const char alfa[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ,.' "; // Il numero di caratteri nell'alfabeto static const long long CAR_ALFA = 30; // Questa variabile contiene il numero massimo di caratteri di un messaggio static const long long MAX_CAR = 1000; // Questa variabile contiene il numero di caratteri di ogni "blocco" static const long long LUNGH_BLOCCO = 4; // Massimo numero di blocchi static const long long MAX_BLOCCHI = 100; /* Ritorna la posizione del carattere "c" nell'alfabeto "alfa", oppure -1 se il carattere "c" non compare nell'alfabeto "alfa" */ long long alfabeto(char c) { for(int i = 0; i < CAR_ALFA; ++i) if (c == alfa[i]) return(i); return(-1); } /* Trasformazione del messaggio in un equivalente numerico "num_car" è il numero di caratteri nel messaggio */ void trasforma_in_numeri(std::string& messaggio, long long num_blocchi, long long plaintxt[MAX_BLOCCHI]) { for(long long i = 0; i < num_blocchi; ++i) { long long k = 0; for(long long j= LUNGH_BLOCCO * i; j