decodages/etape3.c
2024-01-24 18:22:15 +01:00

60 lines
1.7 KiB
C

#include <stdio.h>
#include <stdlib.h>
/* 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 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);
free(stream);
return EXIT_SUCCESS;
}