#include #include #include /* Cette fonction utilise la methode d'exponentiation rapide afin de calculer des grands nombres de maniere recursive*/ long long int exponentiation(long long int nb, long long int d, long long int n) { /* Si on arrive a la puissance 0*/ if (d == 0) { return 1; } /* Si la puissance est paire, on la divise par 2 et on peut ainsi mette notre nombre au carre */ else if (d % 2 == 0) { nb = exponentiation(nb, d / 2, n); return (nb * nb) % n; } /* Sinon la puissance est impaire, on la transforme en puissance paire en enlevant 1 a la puissance d lors de l'appel recursif de la fonction et en multipliant le resultat par nb */ else { return (nb * exponentiation(nb, d - 1, n)) % n; } /* Version iterative while (d > 0) { if (d % 2 == 1) { resultat = (resultat * nb) % n; } d = d / 2; printf("\nCle : %d Nombre : %d", d, nb); nb = (nb * nb) % n; } return resultat; */ } int main(void) { /*Parametres RSA*/ long long n = 6554179; long long e = 689149; long long d = 55621; FILE* stream = fopen("Etape4.bin","r"); /* Variable pour les caracteres chiffres */ long long int nb; /* Tant que la fin du fichier n'est pas atteinte, dechiffrer chaque caractere en calculant le modulo de la valeur numerique de chacun */ while (fread(&nb, sizeof(long long int), 1, stream) != 0) { long long int dechiffre = exponentiation(nb, d, n); printf("%c", (char)dechiffre); } fclose(stream); }