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, botów: 0