Etape 3 Partie 2
This commit is contained in:
parent
90062b6d4d
commit
a79fe2b5ee
@ -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
BIN
decodages.zip
Normal file
Binary file not shown.
47
etape3.c
47
etape3.c
@ -2,24 +2,41 @@
|
||||
#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;
|
||||
/* 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) {
|
||||
|
||||
/*Utilisation de l'algorithme d'exponentiation rapide pour gerer les grands nombres */
|
||||
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 */
|
||||
/* Si on arrive a la puissance 0*/
|
||||
if (d == 0) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
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 */
|
||||
/* 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;
|
||||
}
|
||||
|
||||
/* Lignes ajoutées pour illustrer le processus */
|
||||
printf("d = %lld, nb = %lld, resultat = %lld\n", d, nb, resultat);
|
||||
/* 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) {
|
||||
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user