Typecasting aka Caesar-Verschlüsselung!



  • mywish schrieb:

    out schrieb:

    kette[zaehler] + verschiebung + (kette[zaehler]-'a'+1)
    

    Allerdings musst du testen, ob kette[zaehler] ein Groß- oder Kleinbuchstabe ist.

    perfekt danke

    edit:

    errr leider nicht gut. 😞

    Nicht gut?



  • nah okay aber wie kann ich mich auf die verschlüsseltes zeichen beziehen?

    okay Ich glaube, ich habe es gefunden:

    (kette[zaehler] + verschiebung + kette[zaehler] + verschiebung -'a' + 1)



  • Überleg dir mal lieber wie du das rückgängig machen willst.



  • hustbaer schrieb:

    Überleg dir mal lieber wie du das rückgängig machen willst.

    hustbaer schrieb:

    Überleg dir mal lieber wie du das rückgängig machen willst.

    rückgangig geht shon aber einfach weiss ich nicht wie um den Index des Zeichens noch verschieben könnte.

    also z.B. acd erste index a zweite c dritte d. soll so aussehen.
    erste index + 1 = b
    zweite + 2 = e
    d + 3 = g

    BEG...

    here ist Rückganging aber das hilft mir nix.

    void caesarKnacken(string kette)
    {
    int laenge, verschiebung;

    //die Länge der ursprünglichen Zeichenkette ermitteln
    laenge = kette.length();
    cout << "Durchprobieren der Caesar-Verschluesselungen" << endl;

    //alle Verschiebewerte von 1 bis 255 durchgehen
    for (verschiebung = 1; verschiebung <= 255; verschiebung++)
    {
    cout << "Mit der Verschiebezahl " << verschiebung << " ist das Ergebnis : ";

    //jedes Zeichen um den angegebenen Wert verschieben, diesmal aber nach links
    for (int zaehler = 0; zaehler < laenge; zaehler++)
    cout << static_cast<char>(kette[zaehler] - verschiebung);

    cout << endl;

    //alle 10 Ausgaben auf eine Eingabe warten
    if (verschiebung % 10 == 0)
    getchar();
    }

    cout << endl << endl;
    }



  • BEG? Nene, so geht das hier nicht. Kauderwelsch schaut sich niemand an. Du musst klare Probleme, klare Fragen formulieren, sodass man sich in deinen Beitrag verliebt. Außerdem sollst du C++-Code-Tags verwenden (unter den Smileys). Ich zumindest schaue unformatierte Quellcodes nicht an, da sind wir nämlich wieder beim Kauderwelsch.



  • out schrieb:

    BEG

    mensch das war mein Beispiel ...



  • @mywish
    Meinst du auf's erste Zeichen 1 draufaddieren, aufs zweite 2 und so weiter?
    Ja, das könnte man dann rückgängig machen.

    Ich dachte du willst auf das Zeichen den Index des Zeichens draufaddieren.
    Also z.B. C ist das 3. Zeichen im Alphabet = Index 3 = 3 draufaddieren.
    Was quasi einer Verdoppelung entspricht.
    Und wenn du (x * 2) % N rechnest, dann lässt sich das halt net rückgängig machen. Zumindest nicht wenn N gerade ist.

    aber weiss ich nicht wie ich noch eine zusaetzliche Verschiebung um den Index machen könnte.

    Das ist SO trivial, hier würde jeder noch so kleine Tip bedeuten dass wir deine Hausaufgaben machen, und dazu hab ich echt keine Lust.



  • [code="cpp"]

    mywish schrieb:

    nah okay aber wie kann ich mich auf die verschlüsseltes zeichen beziehen?

    okay Ich glaube, ich habe es gefunden:

    (kette[zaehler] + verschiebung + kette[zaehler] + verschiebung -'a' + 1)

    ## Hallo mywish,

    So wird das nicht funktionieren. Wie ermitellst du die Position von deine Zeichenkette? Stehe vor gleichen Problem. Hast du inzwischen dein Problem gelöst?

    Gruß
    Andy
    👍



  • Also falls immer noch Interesse besteht..

    #include <iostream>
    using namespace std;
    
    void caesar(string);
    
    void caesar(string kette)
    {
    int laenge, verschiebung;
    
    //die Länge der ursprünglichen Zeichenkette ermitteln
    laenge = kette.length();
    cout << "Caesar-Verschluesselung" << endl;
    
    //den Verschiebewert einlesen
    cout << "Bitte geben Sie den Verschiebewert ein: ";
    cin >> verschiebung;
    
    //jedes Zeichen um den angegebenen Wert verschieben
    
    for (int zaehler = 0 ; zaehler < laenge; zaehler++)
    cout << static_cast<char>(kette[zaehler] + verschiebung + (zaehler + 1));
    cout << endl << endl;
    }
    int main()
    {
    string eingabe;
    
    //Die ursprüngliche Zeichenkette einlesen
    cout << "Bitte geben Sie eine Zeichenkette ein (ohne Leerzeichen): ";
    cin >> eingabe;
    cout << "Die urspruengliche Zeichenkette ist: " << eingabe << endl << endl;
    
    caesar(eingabe);
    
    return 0;
    }
    

    Oder halt nur:

    cout << static_cast<char>(kette[zaehler] + verschiebung + (zaehler + 1));
    

    Klappt problemlos.. 😉



  • void caesar(string); 
    
    void caesar(string kette) {...}
    

    Wieso setzt du eine Deklaration vor die Definition, das ist doch völlig überflüssig... ? (Wie noch so einiges in deinem Code)

    cout << endl << endl;
    

    So etwas gehört ebenfalls nicht in die Funktion hinein (und wenn, dann gibt man "\n\n" aus). Die Funktion sollte selbst überhaupt nichts ausgeben, idealerweise.

    Die Funktion sollte eigentlich etwas verschlüsseltes zurückgeben oder irgendwo hinschreiben. Und auf keinen Fall selbst noch Parameter einlesen.


Anmelden zum Antworten