59 lines
1.7 KiB
C
59 lines
1.7 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <math.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 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);
|
|
} |