ROT47 Verschlüßelung



  • OH THX
    werds gleich mal ausprobieren



  • 2211 schrieb:

    Hi das Thema Interessiert mich auch und wie kann ich wieder entschlüsseln ???

    Der Witz bei ROT13 ist, das dieselbe Routine sowohl zum Ver- als auch Entschlüsseln benutzt werden kann. Denn 13 + 13 = 26, die Anzahl der lateinischen Buchstaben.

    bis bald
    akari



  • so der fehler mit dem char ist weg doch ich hab echt kein schimmer wie ich das in die memo ausgeben kann
    ich krieg da laufend fehlermeldungen und dann weis ich noch nicht mal was dieses "%c" bedeuten soll



  • Hallo

    das mit dem "%c" fällt eh weg, wenn du das printf gegen einen Ziel-AnsiString umtauscht.
    Mal ein Tip: wechsle komplett das *char ** gegen AnsiString aus, dann wird auch schon mal der Aufruf wieder einfacher.
    Dann erstellst du in der Funktion einen lokalen AnsiString, dem du die umgerechneten Zeichen anhängst, anstatt die mit printf auf der Konsile auszugeben. Den lokalen AnsiString gibts du dann zurück, nachdem du dann auch den Rückgabewert der Funktion angepasset hast.

    bis bald
    akari



  • Ich komme hier nicht weiter kann mier jemand helfen ??

    list->Add(rot13(edits[k]->Text.c_str()));



  • Hallo

    Das ist kein Wunder, schau dir nochmal den Rückgabewert der Original-Funktion rot13 im ersten Post hier an, und schau was ->Add() als Parmeter erwartet.
    Und wie du das so ändern kannst, das genau das funktioniert, steht genau einem Post über deinem in meinem.

    bis bald
    akari



  • kann mir vieleicht jemand sagen wie ich das richtig anwende

    char nach Ansi
    AnsiString=char;

    bei
    Ansi nach char
    char=AnsiString.c_str();

    hab ich das so gemacht

    rot13(Memo1->Text.c_str());
    


  • So sieht jetzt mein Rot 13 Code aus:

    void rot13(AnsiString *string)
    {
    int len = string->Length(), x;
    for (x = 0; x <= len; x++)
    {
    if (((string[x] >= 65) && (string[x] <= 77)) || ((string[x] >= 97) && (string[x] <= 109)))
    {
    printf("%c", string[x]+13);
    }
    else if (((string[x] >= 78) && (string[x] <= 90)) || ((string[x] >= 110) && (string[x] <= 122)))
    {
    printf("%c", string[x]-13);
    }
    else printf("%c",string[x]);
    }
    }
    

    So sieht der Aufruf aus:

    list->Add(rot13(edits[k]->Text));
    

    Das sind die Fehler:

    [C++ Fehler] Unit2.cpp(43): E2034 Konvertierung von 'AnsiString' nach 'AnsiString *' nicht möglich

    [C++ Fehler] Unit2.cpp(43): E2342 Keine Übereinstimmung des Typs beim Parameter 'string' ('AnsiString *' erwartet, 'AnsiString' erhalten)

    [C++ Fehler] Unit2.cpp(43): E2342 Keine Übereinstimmung des Typs beim Parameter 'string' ('AnsiString *' erwartet, 'AnsiString' erhalten)



  • Hallo

    ich gebs auf. Also für euch der fertige Code zum Kopieren...

    AnsiString rot13(const AnsiString &Original)
    {
      AnsiString Ergebnis;
      for (int x = 1; x <= Original.Length(); x++)
      {
        if (((Original[x] >= 65) && (Original[x] <= 77)) || ((Original[x] >= 97) && (Original[x] <= 109)))
        {
          Ergebnis += char(Original[x]+13);
          }
        else if (((Original[x] >= 78) && (Original[x] <= 90)) || ((Original[x] >= 110) && (Original[x] <= 122)))
        {
          Ergebnis += char(Original[x]-13);
          }
        else Ergebnis += char(Original[x]);
        }
      return Ergebnis;
      }
    ...
    AnsiString Test = "Hallo 123 Meier";
    Edit1->Text = rot13(Test); // Test wird kodiert und in Edit1 angezeigt
    Edit2->Text = rot13(Edit1->Text); // Inhalt von Edit1 wird decodiert und in Edit2 angezeigt
    

    bis bald
    akari



  • Danke Vielmals funktioniert toll.

    Aber dass ich auch etwas dabei gelernt habe. Wie funktioniert denn das Prinzip von rot13 nicht ganz gerafft könnte mier es jemand erklären dann versuche ich nälich auf eigne faust zu verscuhen zahlen einzubinden 😉



  • Hallo

    Einfach hier nachlesen. Das hättest du machen sollen bevor du versuchst ein Programm dafür zu schreiben!

    bis bald
    akari


Anmelden zum Antworten