From c6453b3a4ccfd74f8174d3846906bec8e4ff0a66 Mon Sep 17 00:00:00 2001 From: SombrAbsol Date: Wed, 24 Jan 2024 18:22:15 +0100 Subject: [PATCH] Etape 4 --- a.exe | Bin 29605 -> 0 bytes etape3.c | 5 ++- etape4.c | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ etape5.c | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 224 insertions(+), 2 deletions(-) delete mode 100644 a.exe create mode 100644 etape4.c create mode 100644 etape5.c diff --git a/a.exe b/a.exe deleted file mode 100644 index 41eb1461b38bdd632135a745a5852128c6930a1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29605 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

nEG5~fi>bfGhb9UclVKbZ2#DjlVs=J0$Qzmhg9 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 #include -#include /* Cette fonction utilise la methode d'exponentiation rapide afin de calculer des grands nombres de maniere recursive*/ @@ -47,7 +46,7 @@ int main(void) { FILE* stream = fopen("Etape4.bin","r"); - /* Variable pour les caracteres chiffres */ + /* 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 */ @@ -56,4 +55,6 @@ int main(void) { printf("%c", (char)dechiffre); } fclose(stream); + free(stream); + return EXIT_SUCCESS; } \ No newline at end of file diff --git a/etape4.c b/etape4.c new file mode 100644 index 0000000..569d7b9 --- /dev/null +++ b/etape4.c @@ -0,0 +1,111 @@ +#include +#include +#include + +/* n = p * q => p et q sont des nombres premiers + e = pgcd(e,(p-1)(q-1)) + d doit etre inverse de e modulo(p-1)(q-1) + --> d*e = 1 mod((p-1)(q-1)) + (M^e) mod n = C + M = (C^d) mod n + + (n=5625943,e=2158731) + */ + +/* Creation de la structure qui gardera le nombre premier p et q */ +typedef struct nbPremier +{ + long long int p; + long long int q; +} premier; + +/* Verifier si un nombre est premier ou non */ +int nombrePremier(long long int x) +{ + /* Il faut que le nombre soit superieur a 1 */ + if (x < 2) + { + return 0; + } + /* Test pour savoir si c'est un nombre premier */ + for (int i = 2; i * i <= x; i++) + { + if (x % i == 0) + { + return 0; + } + } + return 1; +} + + +/* Trouver p et q a partir d'une boucle for : on va tester si un nombre est diviseur de n. +Si c'est le cas, on teste si ce nombre est premier et si nombre/n est premier (car nombre * (nombre/n) = n +Si les deux nombres sont premiers, alors on a nos 2 facteurs premiers qui multiplier ensemble donnent n */ +premier findPq(long long int n) +{ + premier pq; + for (int i = 2; i < n; i++){ + if (n % i == 0){ + if (nombrePremier(i) && nombrePremier(n/i)){ + pq.q = i; + pq.p = n/i; + return pq; + } + } + } +} + +/* 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; + } +} + +int main(void) { + /*Parametres RSA*/ + long long int n = 5625943; + long long int e = 2158731; + long long int d, nb, phi; + + /* Recherche des nombres premiers p et q */ + premier facteurs = findPq(n); + phi = (facteurs.p - 1)*(facteurs.q - 1); + + /* Calcul de la cle privee d a partir de la formule : (e*d) mod phi = 1 */ + for (int i = 1; i < phi; i++) { + if ((e * i) % phi == 1) { + d = i; + break; + } + } + + FILE* stream = fopen("Etape5.bin","r"); + + /* 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; +} \ No newline at end of file diff --git a/etape5.c b/etape5.c new file mode 100644 index 0000000..f1a38df --- /dev/null +++ b/etape5.c @@ -0,0 +1,110 @@ +#include +#include +#include + +/* n = p * q => p et q sont des nombres premiers + e = pgcd(e,(p-1)(q-1)) + d doit etre inverse de e modulo(p-1)(q-1) + --> d*e = 1 mod((p-1)(q-1)) + (M^e) mod n = C + M = (C^d) mod n + + (n=5625943,e=2158731) + */ + +/* Creation de la structure qui gardera le nombre premier p et q */ +typedef struct nbPremier +{ + long long int p; + long long int q; +} premier; + +/* Verifier si un nombre est premier ou non */ +int nombrePremier(long long int x) +{ + /* Il faut que le nombre */ + if (x < 2) + { + return 0; + } + for (int i = 2; i * i <= x; i++) + { + if (x % i == 0) + { + return 0; + } + } + return 1; +} + + +/* Trouver p et q a partir d'une boucle for : on va tester si un nombre est diviseur de n. +Si c'est le cas, on teste si ce nombre est premier et si nombre/n est premier (car nombre * (nombre/n) = n +Si les deux nombres sont premiers, alors on a nos 2 facteurs premiers qui multiplier ensemble donnent n */ +premier findPq(long long int n) +{ + premier pq; + for (int i = 2; i < n; i++){ + if (n % i == 0){ + if (nombrePremier(i) && nombrePremier(n/i)){ + pq.q = i; + pq.p = n/i; + return pq; + } + } + } +} + +/* 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; + } +} + +int main(void) { + /*Parametres RSA*/ + long long int n = 1028648100739351553; + long long int e = 138115088263636411; + long long int d, nb, phi; + + /* Recherche des nombres premiers p et q */ + premier facteurs = findPq(n); + phi = (facteurs.p - 1)*(facteurs.q - 1); + + /* Calcul de la cle privee d a partir de la formule : (e*d) mod phi = 1 */ + for (int i = 1; i < phi; i++) { + if ((e * i) % phi == 1) { + d = i; + break; + } + } + + FILE* stream = fopen("Etape5.bin","r"); + + /* 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; +} \ No newline at end of file