23.7 Cäsarverschlüsselung - Die Klasse EnKrypt
 
VHFUHWFRPPXQLFDWLRQLVDQHHGQRWRQOBIRUPLOLWDUBFRPPDQGHUVDQ
GLQWHOOLJHQFHDJHQWVEXWDOVRRIODUJHFRPPHUFLDODQGLQGXVWULDO
ILUPVUHODBLQJFRQGLGHQWLDOLQIRUPDWLRLQWRGDBVZRUOGSUREDEOB
DWOHDVWQLQHWBSHUFHQWRIVHQVLWLYHRUVHFUHWLQIRUPDWLRQWUDQVP
LWWHGHOHFWURQLFDOOBDULVHVLQWKHODWWHUVHFWRURQHKDVRQOBWRWK
LQNRIWKHIORZRIFUHGLWLQIRUPDWLRQDPRQJYDULRXVILQDQFLDOLQVW
LWXWLRQVWKHWUHPHQGRXVTXDQWLWLHVRIVXFKLQIRUPDWLRQPDNHLWLP
SHUDWLYHWKDWFRQILGHQWLDOLWBEHJXDUDQWHGHGEBDVBVWHPRIHQFUB
WLRQSZKLFKLVERWKFRPSXWDWLRQDOOBIHDVLEOHDQGBHWYHUBKDUGWRG
HFUBSWZKHQLQIRUPDWLRQLVLQWHUFHSWHG
 
  Verstehen Sie den Text? 

Von Cäsar stammt die Methode, Texte dadurch zu verschlüsseln, dass man die einzelnen Buchstaben um eine bestimmte Anzahl im Alphabet weiterrückt. Das nachfolgende Programm soll demonstrieren, wie man mit den Char-Manipulationen einen Text mit der Methode nach Cäsar verschlüsselt. Die Signatur der Methode ist:

caesar(String originalText, int Schluessel): String

Wie ist die Methode spezifiziert? Wie die Signatur zeigt, werden der Methode den zu verschlüsselnden Text und der Schlüssel als String-Objekt bzw. als int-Wert übergeben. Der Text wird in einen String 'umgewandelt', der nur Großbuchstaben enthält. Alle Leerzeichen im Originaltext sollen herausgefiltert werden. Der um den Schlüsselwert k verschobene Text (Anmerkung: Man denke sich das Alphabet mit den Buchstaben 'A', 'B',..,'Z' in einem Ring angeordnet, so dass beim Verschieben das Alphabet nicht verlassen wird. Wird also 'Y' um 4 Stellen verschoben, so erhalten wir den Buchstaben 'C') wird als String zurückgegeben.
 

Die Methode caesar()
public static String caesar(String originalText, int k){

  //alles in Großbuchstaben

  originalText = originalText.toUpperCase();



  //Initialisierung des Geheimtextes

  String geheimText = "";



  //Aufbau des neuen Strings

  for (int i = 0; i < originalText.length(); i++){

    //Zeichen für Zeichen wird aus dem Originaltext gelesen

    char zeichen = originalText.charAt(i);



    //Leerzeichen herausfiltern

    if (zeichen == ' ');

    //eigentliches Verschlüsseln

    else geheimText = 

         geheimText + (char)((zeichen + k-65)%26+65);

  }

  return  geheimText;

}
Bemerkungen Der ACSII-Kode der Großbuchstaben ist:
 
65 66 67 68 69 70 71       88 89 90
A B C D E F G ... ... ... X Y Z
 
wenn wir vom ASCII-Kode der Buchstaben jeweils 65 subtrahieren, erhalten wir die folgende Tabelle:
 
0 1 2 3 4 5 6       23 24 25
A B C D E F G ... ... ... X Y Z

Erst in diesem Kode verschieben wir. Dazu denken wir uns die Tabelle zu einer Schleife verformt, dass das Ende zum Anfang kommet.

Wir bekommen nach dem Verschieben den richtigen Platz wenn wir den Rest bei der Division durch 25 angeben.

Im letzten Schritt erzeugen wir wieder den richtigen ASCII-Kode durch Addition von 65.

 

Download:
EnKrypt.java
Die Methode bringen wir als static-Methode in einer Klasse EnKrypt unter. Von der Logik her wird sie ähnlich aufgebaut wie die Klasse Mathematik und wird Schritt für Schritt mit Verschlüsselungsmethoden aufgefüllt. 

Ein kleines Testprogramm überprüft die Funktionalität der caesar(..) - Methode.
 

Download:
EnKryptTest.java
public class EnKryptTest {



  public static void main (String[] args) {

     String originalText = "veni vidi vici";

     String geheimText = EnKrypt.caesar(originalText,3);

     System.out.println(geheimText);

  }

}
zu 23.8 Übungen
zur Startseite www.pohlig.de  (C) MPohlig 2004