Block-Cipher

Diese Aufgabe vermittelt einen Eindruck davon, was wir mit Problemlösungsfähigkeiten in der Informatik meinen. Bis zum Ende des Kurses werden Sie durch Übung und Erfahrung in der Lage sein, solche Aufgaben weitgehend eigenständig zu bearbeiten. In der Vorlesung haben wir die Aufgabe zusammen durchgearbeitet.

Aufgaben nach diesem Schema (aber natürlich nicht diese Aufgabe und mit reduziertem Umfang) können auch in der Prüfung vorkommen. In der Prüfung werden wir solche Aufgaben in mehrere Teilaufgaben aufteilen, um Teilpunkte zu erreichen, und mit mehr Hinweisen zur schrittweisen Umsetzung versehen.

Aufgabenstellung

Bei einer Permutations-Chiffre wird der Klartext – anders als z.B. bei der Caesar-Chiffre – nicht durch andere Zeichen ersetzt, sondern die vorhandenen Zeichen werden nur umsortiert. In dieser Aufgabe implementieren Sie eine blockweise Permutations-Chiffre: Der Text wird dazu in Blöcke fester Länge aufgeteilt und innerhalb jedes Blocks werden die Zeichen nach einem vorgegebenen Muster neu angeordnet.

Beispiel

Der Text “HALLOWELT” hat folgende Blöcke der Länge 3:

HAL LOW ELT

Der Permutationsschlüssel “201” bedeutet: Position 0 geht nach 2, Position 1 geht nach 0, Position 2 geht nach 1. Für den ersten Block heißt das: HAL -> ALH

Also ist der Ciphertext von HALLOWELT bei diesem Schlüssel: ALHOWLLTE

Anforderungen

Implementieren Sie ein Programm, das

  • den Klartext (= Kommandozeilenparameter) in Blöcke fester Länge (z.B. 3) aufteilt,
  • dazu einen geeigneten Permutationsschlüssel einliest (= Kommandozeilenparameter),
  • jeden Block gemäß eingelesenem Schlüssel permutiert und den verschlüsselten Text ausgibt.
  • Ihr Programm soll gut designed sein, d.h. Vermeiden Sie Wiederholungen und nutzen Sie das Prinzip der Abstraktion.

Beispielaufruf:

./permute 201 VSCODE
Output: SCVDEO

Hinweise

  • Die Blocklänge kann im Sourcecode fest auf 3 gesetzt werden.
  • Akzeptieren Sie nur gültige Eingaben. Geben Sie andernfalls einen aussagekräftigen Fehler aus.
  • Der Permutationsschlüssel muss eine gültige Permutation der Positionen 0, 1, 2 sein.
  • Um Sonderbehandlungen zu vermeiden, kann das Programm zusätzliche Anforderungen an den Klartext stellen.
  • Verwenden Sie einen geeigneten Exit-Code.

Tipps zur Herangehensweise

  1. Verstehen Sie das Problem
    • Machen Sie sich das Beispiel klar.
    • Probieren Sie die Permutation mit Stift und Papier aus.
    • Malen Sie eine Skizze, wie die Situation im Speicher aussieht.
  2. Strukturieren Sie das Problem
    • Welche Teilschritte sind nötig?
    • Was muss nacheinander passieren?
    • Welche Zwischenergebnisse brauchen Sie?
  3. Beginnen Sie mit einem einfachen Ansatz
    • Fangen Sie mit einem Minimalprogramm an.
    • Erweitern Sie es Schritt für Schritt.
    • Testen Sie jeden Schritt.
  4. Verbessern Sie die Lösung
    • Machen Sie den Code übersichtlich.
    • Lagern Sie wiederholte Operationen in Funktionen aus.
    • Fügen Sie Fehlerprüfungen hinzu.