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;
}