Etape 3 Partie 2

This commit is contained in:
SombrAbsol 2024-01-24 14:42:34 +01:00
parent 90062b6d4d
commit a79fe2b5ee
4 changed files with 31 additions and 54 deletions

BIN
a.exe

Binary file not shown.

View File

@ -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

BIN
decodages.zip Normal file

Binary file not shown.

View File

@ -2,24 +2,41 @@
#include <stdlib.h> #include <stdlib.h>
#include <math.h> #include <math.h>
long long int calculmodulo(long long int nb, long long int d, long long int n) { /* Cette fonction utilise la methode d'exponentiation rapide
long long int resultat = 1; 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) {
/*Utilisation de l'algorithme d'exponentiation rapide pour gerer les grands nombres */ /* Si on arrive a la puissance 0*/
while (d > 0) { if (d == 0) {
/* Si le bit de droite de d est 1 (d est impair) */ return 1;
if (d % 2 == 1) {
resultat = (resultat * nb) % n; /* Multiplier le resultat par nb et prendre le modulo n */
} }
d = d / 2; /* Diviser d par 2 (decalage d'octets vers la droite) */ /* Si la puissance est paire, on la divise par 2
nb = (nb * nb) % n; /* elever nb au carre et prendre le modulo n */ et on peut ainsi mette notre nombre au carre */
else if (d % 2 == 0) {
nb = exponentiation(nb, d / 2, n);
return (nb * nb) % n;
}
/* Lignes ajoutées pour illustrer le processus */ /* Sinon la puissance est impaire, on la transforme en puissance paire en enlevant 1
printf("d = %lld, nb = %lld, resultat = %lld\n", d, nb, resultat); 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; return resultat;
*/
} }
int main(void) { int main(void) {
@ -30,12 +47,12 @@ int main(void) {
FILE* stream = fopen("Etape4.bin","r"); FILE* stream = fopen("Etape4.bin","r");
/*Variable pour caracteres*/ /* Variable pour les caracteres chiffres */
long long int nb; long long int nb;
/*Tant que la fin du fichier n'est pas atteinte, dechiffrer chaque caractere*/ /* Tant que la fin du fichier n'est pas atteinte, dechiffrer chaque caractere
/*en calculant le modulo de la valeur numerique de chacun*/ en calculant le modulo de la valeur numerique de chacun */
while (fread(&nb, sizeof(long long int), 1, stream) != 0) { 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); printf("%c", (char)dechiffre);
} }
fclose(stream); fclose(stream);