Witam, próbuję zaimplementować algorytm RSA w C. Mój sposób jest dość trywialny, ponieważ ma to być najprościej jak się da.
Jednakże, mam pewien problem. Moja implementacja (chyba) nie daje poprawnych wyników. Czy ktoś mógłby sprawdzić kod? Czekam na wszystkie uwagi i propozycje,
Pozdrawiam.

 #include <stdio.h>
#include <stdbool.h>
#include <time.h>
#include <math.h>

/*          Algorytm RSA
    Uzytkownik wybiera dwie dowolne liczby pierwsze(im wieksze, tym lepiej
    bo to od nich zalezy bezpieczenstwo szyfru)
    Nastepnie zostaje obliczony ich iloczny, pozniej zostaje wybrana liczba e,
    ktora wspolnie z n stanowic bedzie klucz szyfrujacy. Liczby e oraz (p-1)*(q-1)
    powinny byc wzglednie pierwsze. Zostaje wczytany tekst jawny.
    Wartosc tekstu tajnego oblicza sie ze wzoru: S = J^(e) (modn) */

bool pierwsza(int n);
int NWD(int a, int b);

int main(void)
{
    int p, q, n, m, e;
    int J, S;
    
    for( ; ; )
    {
        scanf("%d %d", &p, &q);
        if(pierwsza(p) && pierwsza(q))
            break;
    }
    
    m = (p-1)*(q-1);
    n = p*q;
    
    printf("%d\n", n);
    
    for( ; ; )
    {
        e = rand() % 100;
        if(NWD(m, e) == 1)
            break;
    }
    
    printf("%d\n", e);
    
    scanf("%d", &J);
    
    S = pow(J, e);
    S = S % n;
    
    printf("%d", S);
    
    
    system("pause");
}

bool pierwsza(int n)
{
    int dzielnik;
    if(n <= 1)
        return false;
    for (dzielnik = 2; dzielnik*dzielnik <=n; dzielnik++)
        if(n % dzielnik == 0)
            return false;
        return true;
}

int NWD(int a, int b)
{
    int c;
    
    for( ; ; )
    {
        if( b == 0 )
            break;
        c = a % b;
        a = b;
        b = c;
    }
    return a;
}