szyfrowanie RSA

0

Móglby ktoś sprawdzić co w tym kodzie jest nie tak, program jest tworzony na podstawie wiedzy własnej oraz ogólnodostępnych danych w internecie.
Wszystko bylo by dobrze ale nie dziala za kazdym razem i nie szyfruje duzego zakresu liczb.

Czy to zalezy od zakresu zminnej , czy problem tkwi w jakiejs czesci kodu? Moglby ktos powiedziec co jest nie tak i co nalezy zmienić? Będe bardzo wdzięczny.

#include <stdio.h>
#include <stdlib.h>



main(void)
{
//zmienne potrzebne do dzialania programu
int p,q,i,n,fi,e,d,s,m,c;
int z1,z2=time(NULL);
int los1[10] = {11, 13, 17, 19, 23,29, 31, 37, 41, 43};
int p_pierwsza =0;
int q_pierwsza =0;
z1= time(NULL);
srand(z1);
p = los1[rand() % 10];		//losowanie p q
q = los1[rand() % 10];

puts("**********************************");

printf("\nProgram szyfrujacy metoda RSA\n\n"); 

puts("**********************************");

//sprawdzenie p
	for(i=2; i<p ; i++){
    if(p % i == 0){
      printf("%d nie jest liczba pierwsza!\n",p);
			p_pierwsza=0;
      exit(1);		//jezeli liczba nie jest pierwsza wychodzimy z programu
    }
		else{
			p_pierwsza=1;
	}
}

//sprawdzenie q
	for(i=2; i<q ; i++){
    if(q % i == 0){
      printf("%d nie jest liczba pierwsza!\n",q);
			q_pierwsza=0;
      exit(1);		//jezeli liczba nie jest pierwsza wychodzimy z programu
    }
		else{
			q_pierwsza=1;
	}
}



//wyliczanie danych 
	if(p_pierwsza==1 && q_pierwsza==1){	//jezeli p i q sa pierwsze wykonujemy kod
	n = p*q;
	fi=(p-1)*(q-1);
	printf("F(n) = %d \n",fi);

	z2= time(NULL);
	srand(z2); 
	e = los1[rand() % 10];
	if(e>1 && e<fi){
		printf("E to %d\n",e);		//losowane z tabeli los[]
	}

}
	else{		//zamykam program jesli p i q nie sa liczba pierwsze/ w sumie zbedne bo losujemy z tabeli
	exit(1);
	}
//odwrotnosc e schemat
	d = 1;
	do{
	s = (d*e)%fi;
	d++;
	}while(s!=1);
	d = d-1;
//wyswietla klucze
	printf("Klucz publiczny: {%d,%d} \n",e,n);
	printf("Klucz prywatny: {%d,%d} \n",d,n);

puts("**********************************");


	printf("Podaj tresc do ukrycia:\n");	//szyfrujemy dane 
	scanf("%d",&c);
	m = 1;
	for(i=0;i< d;i++){
	m=m*c%n;
	m = m%n;
	}
	printf("Haslo to: %d \n",m);

puts("**********************************");

	printf("Podaj haslo:\n");	//odszyfrowujemy dane
	scanf("%d",&m);
	c = 1;
	for(i=0;i< e;i++){
	c=c*m%n;
	c = c%n;
	}
	printf("Ukryta tresc: %d \n",c);

return 0;
}
0

Podaj sformatowany kod przed użyciem obfuskatora.

0

W RSA bodajże szyfrowana wiadomość musi spełniać nierówność 0 <= wiadomość < n. Gdzie wiadomość to u Ciebie c, a n to iloczyn p oraz q.

1 użytkowników online, w tym zalogowanych: 0, gości: 1