decodages/etape3.c

42 lines
1.4 KiB
C
Raw Normal View History

2024-01-23 19:44:34 +01:00
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
long long int calculmodulo(long long int nb, long long int d, long long int n) {
long long int resultat = 1;
2024-01-23 19:46:26 +01:00
/*Utilisation de l'algorithme d'exponentiation rapide pour gerer les grands nombres */
2024-01-23 19:44:34 +01:00
while (d > 0) {
2024-01-23 19:46:26 +01:00
/* Si le bit de droite de d est 1 (d est impair) */
2024-01-23 19:44:34 +01:00
if (d % 2 == 1) {
2024-01-23 19:46:26 +01:00
resultat = (resultat * nb) % n; /* Multiplier le resultat par nb et prendre le modulo n */
2024-01-23 19:44:34 +01:00
}
2024-01-23 19:46:26 +01:00
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 */
2024-01-23 19:44:34 +01:00
2024-01-23 19:46:26 +01:00
/* Lignes ajoutées pour illustrer le processus */
2024-01-23 19:44:34 +01:00
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);
}