Szyfrowanie RSA problem klucz prywatny

0

Witam, wiem wiem kod jest na poziomie troglodyty, niestety nie jestem programista i nie mam zamiaru byc. Moj problem jest nastepujacy Musze napisac algorytm RSA i juz na poczatku (chodzi tylko o sprawdzenie czy algorytm szyfrujacy bedzie dzialal prawidlowo) mam problem. Mianowicie, nie wiem z jakich powodów zmienna d zawsze otrzymuje wartosć 0 wyglada to tak jakby wylosowana liczba byla kasowana po wyliczeniu e. Dlaczego tak sie dzieje?
Prosze tylko bez uszczypliwych komentarzy typu ale to jest proste ale to banalne. spedzilem juz nad tym troche czasu i nie mogac znaleŹĆ rozwiazania udalem sie tutaj. Licze na Wasza pomoc. Pozdrawiam

#include <cstdlib>
#include <iostream>
#include <time.h>
#include <math.h>

using namespace std;

int main(int argc, char *argv[])
{
    int p;
    int q;
    int n;
    int phi;
    int e;
    float d;
    srand ( time(NULL) );

    cout << "podaj liczbe pierwsza"<< endl<<endl;
    cin >>p;
    cout <<"podaj kolejna liczbe pierwsza"<< endl<< endl;
    cin >>q;
    n=p*q;
    phi=(p-1)*(q-1);

    int a=(rand()%phi)+1;

    e=a^phi%n;  
    d=(1/e)%phi;

    cout<<"To jest klucz publiczny:"<<n<<","<<e<<endl<<endl;
    cout<<"To jest klucz prywatny: "<<n<<","<<d<<endl<<endl;

    system("pause");
    return 0;
}
0

Musisz napisać d=(1./e)%phi;
No i to z tym ^ jak wyżej, musisz poprawić.

0

Ok kod teraz wyglada tak:

#include <cstdlib>
#include <iostream>
#include <time.h>
#include <math.h>
using namespace std;

int main(int argc, char *argv[])
{
    int p;
    int q;
    int n;
    int phi;
    int e;
    double d;
    srand ( time(NULL) );
    double pow(double,double);

    cout << "podaj liczbe pierwsza"<< endl<<endl;
    cin >>p;
    cout <<"podaj kolejna liczbe pierwsza"<< endl<< endl;
    cin >>q;
    n=p*q;
    phi=(p-1)*(q-1);

    int a=(rand()%phi)+1;
    int b;
    b=pow(a,phi);
    e=b%n;  
    d=(1./e)%phi;

    cout<<"To jest klucz publiczny:"<<n<<","<<e<<endl<<endl;
    cout<<"To jest klucz prywatny: "<<n<<","<<d<<endl<<endl;

    system("pause");
    return 0;
}

I niestety nie kompiluje w miejscu d=(1./e)%phi; wywala [Error] invalid operands of types 'double' and 'int' to binary 'operator%' w takim razie jaka ma byc deklaracja? cos nie gra i nie moge dojsc ladu co...

0

W takim razie nie możesz dać kropki. Jesteś pewien, że d ma być typu double? Problem jest w tym, że to d trzeba obliczyć inaczej, poszukaj jakiejś implementacji tego, to może coś ci się rozjaśni. W każdym razie zapis bez kropki zawsze ci da 0, bo dzielenie 1 przez liczbę całkowitą daje 0 i już.

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