Gymnasium Löbau/Vertiefungsklasse 2010/Cäsar-Verschlüsselung

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Java</language>
== Vorüberlegungen ==

Wie lassen sich prinzipiell Zeichenketten aus Zeichen bilden?<br />
Wir wollen in dem nachfolgenden Beispiel die Konvertierung eines Zeichens in seinen ASCII-Code und umgekehrt nutzen.

<code id="53aca650d4d6a">
private String Alphabet(int n) {
 String Zeichenkette = new String();
 char Zeichen = 'A';
 for (int i = (int) Zeichen; i < (int) Zeichen + n; i++)
  Zeichenkette = Zeichenkette + (char) i;
 return Zeichenkette;
}
</code>

<run id="53aca650d4e79">
Alphabet(26);
</run>

== Cäsar-Verfahren ==

Vervollständige die fehlende Programmzeile in der Funktion <tt>CaesarCodieren</tt>.<br />
Beachte dabei, dass diese Funktion sowohl zum Codieren als auch zum Decodieren genutzt wird. 

<code id="53aca650d4dea">
private char Wandeln(char Zeichen, int Schritt) {
 int Code = (int) Zeichen;
 if (Code > 64 && Code < 91) {
  Code = Code + Schritt;
  while (Code > 90) Code = Code - 26;
  while (Code < 65) Code = Code + 26;
  return (char) Code;
 }
 else
  return Zeichen;
}

private String CaesarCodieren(String Zeichenkette, int Schritt, int Richtung) {
 String Neukette = new String();
 char Buchstabe;
 Zeichenkette = Zeichenkette.toUpperCase();
 for (int i = 0; i < Zeichenkette.length(); i++) {
  Buchstabe = Zeichenkette.charAt(i);
  //Hier wird die neue Zeichenkette gebildet.
 }
 return Neukette;
}

private String Codieren(String Zeichenkette, int Schritt) {
 return CaesarCodieren(Zeichenkette, 3, 1);
}

private String DeCodieren(String Zeichenkette, int Schritt) {
 return CaesarCodieren(Zeichenkette, 3, -1);
}
</code>

<check>
int S = 13;
String Nk = new String("INFORMATIKUNTERRICHT IST TOLL!");
String Zk = DeCodieren(Codieren("Informatikunterricht ist toll!", S), S);
return Zk.trim().equals(Nk);
</check>

<run id="53aca650d4ef9">
Codieren("Hallo Welt!", 3);
</run>

<run id="53aca650d4f71">
DeCodieren("KDOOR ZHOW!", 3);
</run>

== Aufgaben ==

<ol>
<li>
Teste ausführlich das Ver- und Entschlüsseln von Zeichenketten mit dem Cäsar-Verfahren.<br />
Bilde dazu vollständige Sätze, die auch Sonderzeichen enthalten sollen.<br />
Begründe Deine Testergebnisse mit den Implementationen der entsprechenden Funktionen.
</li> 
<li>
Begründe, warum das Cäsar-Verfahren zur Geheimhaltung von Informationen ungeeignet ist.
</li>
</ol>