RSA Modulare Exponentiation



  • Hey, ich wollt für eine RSA Verschlüsselung in C per Modulare Exponentiation eine Funktion schreiben die ein Zeichen verschlüsselt, dies klappt aber nicht so richtig, könnte mal jemand einen Blick auf die Funktion werfen?

    char read_message(char message, int e, int n) {
    
        char zeichen = message;
        int half = e;
        char result = 1;
        while (half > 0) {
            if (half % 2 > 0) {
                result = (result * zeichen) % n;
            } else {
                zeichen = (zeichen * zeichen) % n;
                        half = half / 2;
            }
        }
    
        return result;
    }
    

  • Mod

    Tarsuinn schrieb:

    dies klappt aber nicht so richtig,

    Und könntest du vielleicht auch sagen, was nicht geht?



  • SeppJ schrieb:

    Tarsuinn schrieb:

    dies klappt aber nicht so richtig,

    Und könntest du vielleicht auch sagen, was nicht geht?

    Lande da momentan in einer Endlosschleife.


  • Mod

    Tarsuinn schrieb:

    Lande da momentan in einer Endlosschleife.

    Ok, mit solcher Information sieht man den Fehler auf den ersten Blick. Warum sagst du so etwas nicht sofort?

    Die Schleife kann nie beenden, weil sie endet wenn half==0. In der schleife werden gerade half durch zwei geteilt. Das bedeutet, die kleinste Zahl die half jemals annehmen kann ist 1.



  • SeppJ schrieb:

    Tarsuinn schrieb:

    Lande da momentan in einer Endlosschleife.

    Ok, mit solcher Information sieht man den Fehler auf den ersten Blick. Warum sagst du so etwas nicht sofort?

    Die Schleife kann nie beenden, weil sie endet wenn half==0. In der schleife werden gerade half durch zwei geteilt. Das bedeutet, die kleinste Zahl die half jemals annehmen kann ist 1.

    Hmm das ist es nicht.


  • Mod

    Tarsuinn schrieb:

    Hmm das ist es nicht.

    Muss man dir alles aus der Nase ziehen? Schreib was Sache ist! Hier hat keiner Lust zu raten, was du für Probleme hast.



  • Falls

    if (half % 2 > 0)
    

    zu TRUE ausgewertet wird, wird half nicht geändert sondern behält seinen Wert. Dementsprechend kann die Schleifenabbruchbedingung, die von half abhängt, nicht erreicht werden.



  • Tarsuinn schrieb:

    result = (result * zeichen) % n;
    

    Dein Problem ist, dass, wenn result ein Wert zugewiesen wird, die Schleife nicht abbricht, sondern immer und immer wieder durchlaufen wird.

    Lösungsmöglichkeiten gibt es viele, nach der Zuweisung ein break, anstatt `result =' ein return oder anstatt `while (half > 0) { ... }' ein `do { ... } while (!(half % 2))'. Du hast die Wahl.



  • @SeppJ: Sag mal was ist eigentlich dein Problem? Warum so asoziale und aggressive Antworten? Bist du außerhalb deines Fachbereiches ein armes Würstchen oder will dich keine Frau oder Mann? Was ist dein Problem? Besuche doch mal bitte einen Grundkurs in Kommunikation, dass gehört auf jeden fall nicht zu deinen Stärken, verstehe auch nicht ganz wie ein Mensch Moderator werden kann der als sozialer Analphabet rüber kommt. IMHO extrem inkompetent, aber hat man ja oft dass Leute nur eins können und auf anderen Ebenen total zurückgeblieben sind.

    Also woran liegst bei dir, soziale Inkompetenz oder pure Absicht und einfach nur ein Arsch?


Log in to reply