RSA-Verschlüsselung ergiebt falsche Ergebnisse



  • Hallo Community,
    ich bin gerade dabei ein Programm zu schreiben, dass Passwörter gespeichert werden, die zuvor von dem programm über die RSA-Methode (http://de.wikipedia.org/wiki/RSA-Kryptosystem) verschlüsselt wurden...
    Wenn ich mein Programm laufen lasse erscheinen flasche Ergebnisse der Verschlüsselung, aber ich weiß leider nicht woran das liegt.
    Hier der Code :

    #include <iostream>
    #include <stdio.h>
    #include <cmath>
    
    using namespace std;
    
    //Rechenwerte
    const int SIZE = 3;
    int Werte[SIZE];
    int Dreier[SIZE/3];
    int p = 307;
    int q = 859;
    double N = p*q;
    float phi = (p-1)*(q-1);
    double e = 1721;
    
    long double Verschlusselung[SIZE/3];
    
    int main()
    {
        char input[SIZE];
        // Eingabe...
        cout << "Geben sie den zu verschluesselnden Zeichensatz ein: ";
        cin >> input;
    
        //ASCII Werte
        for(int i=0; i < SIZE; ++i)
    
               Werte[i] = int(input[i]);
    
        //Formung von DreierBlöcken
        for(int i=0; i < SIZE/3; ++i)
        {
              Dreier[i] = Werte[3*i]*10000 + Werte[3*i + 1]*100 + Werte[3*i +2];
    
              //Zur Kontrolle...
              cout << Dreier[i]<< endl;
        }
    
        //Verschlüsselung...
        for(int i=0; i < SIZE/3; ++i)
        {
             Verschlusselung[i] = fmod(pow(Dreier[i], e), N);
             //THEORETISCHES Ergebnis
             cout << Verschlusselung[i] << endl;
        }
    
        return 0;
    }
    

    Der Code ist erstmal vorläufig um zu testen, ob das funktioniert, habe statt "Dreier[i]" in der pow() Funktion auch schon direkt Zachlen eingegeben aber es sind trotzdem falsche Werte herausgekommmen
    Vielleicht kann mir ja jemand helfen...
    ...Danke schonmal im Vorraus



  • mourthag15 schrieb:

    double N = pq;
    float phi = (p-1)
    (q-1);
    double e = 1721;

    Das kann nicht funktionieren. Nimm Ganzzahlen.



  • Ja ehm sry übrigens, dass der Artikel jetzt 2mal drin ist... wollt ich nicht aber bin grad des erste mal drin

    und ja ich weiß dass das nicht gehen kann aber hab vergessen dass zu ändern, danke trotzdem 😉



  • deine umwandlung in zeile 31 ist schwachsinn.
    was erwartest du was da rauskommt?

    wenn du 0 eingibst wird nicht die null gemeint sein, sondern das zeichen '0' (ascii code 48). <-- es wird also die 48 rauskommen, analog gilt dies für alle zeichen auf der tastatur

    wie mein vorredner schon sagte basiert RSA auf ganzzahlen. mit gleichtkommezahlen bringst du höchstens fehler rein



  • double e = 1721;
    

    Also zu meiner Schulzeit war e noch wesentlich kleienr, hat hier etwa die Inflation zugeschlagen?



  • daddy_felix schrieb:

    Also zu meiner Schulzeit war e noch wesentlich kleienr, hat hier etwa die Inflation zugeschlagen?

    das e steht hier für exponent.

    wird aber nicht klappen. bereits 2^1721 ist bei weitem größer als in int oder double passt.


  • Mod

    Doppelthread, ich mache mal einen zu. hier geht es weiter:
    http://www.c-plusplus.net/forum/310591


Anmelden zum Antworten