#include #include #include long long int calculmodulo(long long int nb, long long int d, long long int n) { long long int resultat = 1; // Utilisation de l'algorithme d'exponentiation rapide pour gerer les grands nombres while (d > 0) { // Si le bit de droite de d est 1 (d est impair) if (d % 2 == 1) { resultat = (resultat * nb) % n; // Multiplier le resultat par nb et prendre le modulo n } d = d / 2; // Diviser d par 2 (decalage d'octets vers la droite) nb = (nb * nb) % n; // elever nb au carre et prendre le modulo n // Lignes ajoutées pour illustrer le processus printf("d = %lld, nb = %lld, resultat = %lld\n", d, nb, resultat); } 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 caracteres*/ 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 = calculmodulo(nb, d, n); printf("%c", (char)dechiffre); } fclose(stream); }