Lektion 82:

Cäsar-Chiffre

Zur Codierung seiner Nachrichten soll Cäsar folgendes Verfahren angewandt haben: Statt des Buchstabens, den er meinte, schrieb er den Buchstaben auf, der im Alphabet k Positionen rechts vom gemeinten Buchstaben ist. Wenn man bei 'z' ankommt, muß man bei 'a' weiterzählen.

Beispiel: Mit k=4 wird aus "hello world" der verschlüsselte Text "lipps asvph".

Beispiel: Der Computer im Film "Odyssee im Weltraum" heißt "HAL". Mit k=1 wird daraus "IBM".

Dieses Verfahren wollen wir für den Rechner ein wenig abwandeln. Es werden einfach alle ASCII-Zeichen zugelassen. Das Weiterzählen geschieht dann einfach durch addieren eines char. Wenn man bei CHAR_MAX ankommt, muß man bei CHAR_MIN weiterzählen. Das geschieht sogar automatisch, weil der overflow genau das erledigt.

#include <iostream>
#include <fstream>
using namespace std;

char crypt(char ch,char key) //verschlüsseln
{
   return ch+key;
};

void main()
{
   ifstream in("main.cpp");
   ofstream out("main.cpp.crypt");
   int key;
   cin>>key;

   char ch=in.get();
   while(!in.eof())
   {
      out<<crypt(ch,key);
      ch=in.get();
   };
};

Entschlüsselt wird, indem einfach k Stellen nach links gegangen wird. Es gibt aber keinen Unterschied zwischen 255 Stellen nach rechts gehen und 1 Stelle nach links gehen. Deshalb kann man diesen Text, der mit dem Schlüssel 27 verschlüsselt wurde, mit dem Schlüssel 256-27=229 und dem selben Programm wieder entschlüsseln.

Übung

Schreiben Sie das Programm um, daß es nur die Buchstaben mit dem Cäsar-Chiffre verschlüsselt, aber alle anderen Zeichen unverschlüsselt läßt. Aus "Hello, world!" soll also "Lipps, asvph!" werden.

Was heißt folgender Text?

Vz Vagrearg tvog rf qnf Irefpuyhrffryhatfiresnuera EBG13, qnf bsg va Arjftebhcf rvatrfrgmg jveq. Rf vfg rva Pnrfne-Puvsser zvg x=13.

Einsendungen:

Lösungsvorschlag


Falls Ihnen Fehler im Text auffallen oder Sie Verbesserungsvorschläge haben, dann schicken Sie mir bitte eine Mail. Ich werde mich dann sofort darum kümmern.
[aktuelle Version] [inhalt] [index]      [Fehlerkorrektur, Verbesserungsvorschlag]

© Volkard Henkel <volkard@normannia.de>, last update: 08/25/00