diff --git a/a.exe b/a.exe index 435a29f..41eb146 100644 Binary files a/a.exe and b/a.exe differ diff --git a/a.exe.stackdump b/a.exe.stackdump deleted file mode 100644 index f0a3185..0000000 --- a/a.exe.stackdump +++ /dev/null @@ -1,40 +0,0 @@ -Exception: STATUS_INTEGER_DIVIDE_BY_ZERO at rip=0001004010E2 -rax=000000000000004F rbx=0000000A00000410 rcx=0000000A00000010 -rdx=0000000000000000 rsi=0000000A000003B0 rdi=00000007FFFFCC60 -r8 =00000007FFFFCB1C r9 =00000001800A4F70 r10=0000000800000000 -r11=000000010040115D r12=00000007FFFFCC8D r13=0000000000000000 -r14=0000000000000000 r15=00000007FFFFCC60 -rbp=00000007FFFFCC10 rsp=00000007FFFFCBB0 -program=C:\Users\benja\Documents\UPEC\decodages\a.exe, pid 1692, thread main -cs=0033 ds=002B es=002B fs=0053 gs=002B ss=002B -Stack trace: -Frame Function Args -0007FFFFCC10 0001004010E2 (0007FFFFCC60, 000000000000, 000000000030, 000700000000) a.exe+0x10E2 -0007FFFFCD30 000180047ED1 (000000000000, 000000000000, 000000000000, 000000000000) msys-2.0.dll+0x7ED1 -000000000000 000180045AC3 (000000000000, 000000000000, 000000000000, 000000000000) msys-2.0.dll+0x5AC3 -0007FFFFFFF0 000180045B74 (000000000000, 000000000000, 000000000000, 000000000000) msys-2.0.dll+0x5B74 -End of stack trace -Loaded modules: -000100400000 a.exe -7FFC94C70000 ntdll.dll -7FFC93430000 KERNEL32.DLL -7FFC921F0000 KERNELBASE.dll -000180040000 msys-2.0.dll -7FFC93500000 advapi32.dll -7FFC93FC0000 msvcrt.dll -7FFC93230000 sechost.dll -7FFC921C0000 bcrypt.dll -7FFC94070000 RPCRT4.dll -7FFC91740000 CRYPTBASE.DLL -7FFC92020000 bcryptPrimitives.dll -7FFC6FA40000 netapi32.dll -7FFC8C9A0000 SAMCLI.DLL -7FFC920A0000 ucrtbase.dll -7FFC8CF20000 SAMLIB.dll -7FFC90A00000 NETUTILS.DLL -7FFC94190000 user32.dll -7FFC925A0000 win32u.dll -7FFC93C90000 GDI32.dll -7FFC92670000 gdi32full.dll -7FFC925D0000 msvcp_win.dll -7FFC93960000 IMM32.DLL diff --git a/decodages.zip b/decodages.zip new file mode 100644 index 0000000..86e2b61 Binary files /dev/null and b/decodages.zip differ diff --git a/etape3.c b/etape3.c index f26f233..dd2b376 100644 --- a/etape3.c +++ b/etape3.c @@ -2,24 +2,41 @@ #include #include -long long int calculmodulo(long long int nb, long long int d, long long int n) { - long long int resultat = 1; +/* 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; + } - /*Utilisation de l'algorithme d'exponentiation rapide pour gerer les grands nombres */ + /* Version iterative 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 */ + resultat = (resultat * nb) % 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); + d = d / 2; + printf("\nCle : %d Nombre : %d", d, nb); + nb = (nb * nb) % n; } return resultat; + */ } int main(void) { @@ -30,12 +47,12 @@ int main(void) { FILE* stream = fopen("Etape4.bin","r"); - /*Variable pour caracteres*/ + /* 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*/ + /* 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); + long long int dechiffre = exponentiation(nb, d, n); printf("%c", (char)dechiffre); } fclose(stream);