Wie kann ich eine Caesar-Verschlüsselung programmieren?

3 Antworten

hier mal gucken ob du das schon verstehst

damit hättest du schon mal das verschlüsseln

#include <iostream>
using namespace std;

int main() {
   char eingabeZeichenkette[80];
   /* Alle Zeichen im SchlüsselBand */
   char schluessel[64]=" 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
   int positionsRight = 0;
   char tempZeichen;
   char caesarZeichen ;
   int counter;
   int verschoben = 0;

   cout << "Bitte geben Sie eine Zeichenkette an, die codiert werden soll: ";
   // eingabe Zeichen , max 80 )
   cin.getline(eingabeZeichenkette, 80);

   cout << endl << "Um wie viele Positionen nach rechts sollen die Zeichen verschoben werden: ";
   // eingabe zahl
   cin >> positionsRight;
   // ausgabe beginn 
   cout << endl << "Caesar >>>";
   for (counter=0; eingabeZeichenkette[counter] != '\0'; counter += 1) {

       // Aktuell verarbeitetes Zeichen der Eingabezeichenkette in Zwischenspeicher ablegen
       tempZeichen = eingabeZeichenkette[counter];
       // Band Zeichen Stelle 
       int zaehler = 0;
       // 
       bool gefunden = false;
       // solange bis Zeichen in Band gefunden
       while (!gefunden) {
           // ist das Eingabezeichen an dieser Stelle im Schlüsselband
           if (tempZeichen == schluessel[zaehler] ) {
               // verschiebe die stelle um position nach rechts
              verschoben = zaehler+positionsRight;
               // ist nach der verschiebung das schlüsselband ende erreicht, fang von vorne des schlüsselbandes an
               // achtung letztes zeichen ist immer ein \0 terminierung
              if (verschoben > sizeof(schluessel)-2) { verschoben = sizeof(schluessel)-1-verschoben; }
              // nimm das verschobene zeichen und speicher es als Caesar Versclüsseltes Zeichen
              caesarZeichen = schluessel[verschoben];
              // da wir unser zeichen im schlüsselband gefunden haben , können wir aufhören um zum nächsten eingabe zeichen zu gehen
              gefunden = true;
           } else {
              // sollte das Eingabe Zeichen nicht an dieser Stelle des Schlüsselbandes sein , dann geh zur nächsten Stelle 
              ++zaehler ;
           }
       }
       // Ausgabe des Schlüssel Zeichens
       cout << caesarZeichen;
   }

   cout << "<<< Caesar"<< endl << endl;

   return 1;
}

Fsjler 
Fragesteller
 09.11.2021, 20:45

Danke. Das ist wirklich sehr hilfreich. War schon am verzweifeln. So weit verstehe ich alles dank den Kommentaren. Wie kann man den Ascii Code zusätzlich ausgeben. Gibt es da einen speziellen Befehl. Wir sollten das verschlüsselte und den Ascii Code ausgeben 😊🤔

0
TechPech1984  09.11.2021, 20:58
@Fsjler

das wäre dann mal die aufgabe für dich das zu googeln .

wie zeigt man den ASCII code eines char in c++ an .

0

Char in int umwandeln, dann + 1 rechnen und int wieder zurück zu char und dann hast du +1 verschoben zum Beispiel ...


Zahhak  09.11.2021, 18:57

Und vorher sicherstellen, dass der char >= 'a' && <= 'z' bzw. >= 'A' && <= 'Z' ist und beim überschreiten von z bzw. Z wieder zu a bzw. A rotieren.

1
Und ab da komm ich nicht weiter.

Dann arbeite doch Schritt für Schritt.

  • Was sind die erlaubten Zeichen?
  • Wie bekomme ich von einem einzelnen Buchstaben einen Zahlenwert, mit dem man arbeiten kann? Stichwort ASCII
  • Wie verschiebe ich ein einzelnes Zeichen korrekt um die eingegebene Distanz, sodass ein erlaubtes Zeichen wieder rauskommt? Stichwort: Modulo
  • Wie wende ich das jetzt auf den gesamten String an? Stichwort: Schleife