MezData-Logo

SecretBox

Geheimnis-Box

Eine Geheimnis-Box soll entwickelt werden:

SecretBox
- key: Text
- info: Text
+SecretBox(k:Text, i:Text)
+getInfo(k:Text):Text
public class SecretBox{
  private String key,info;  // key und info sind nur innerhalb der Klasse zugreifbar
  public SecretBox(String k, String i){ // Konstruktor kann jeder aufrufen
    key = k;
    info = i;
  }
  public String getInfo(String k){  // get-Methode kann jeder aufrufen
    if (key.equals(k)) return info; // wenn key = k
    return "Falscher Schluessel";
  }
}

Ein SecretBox-Objekt hat einen Schlüssel-Text und die geheime Information. Nur wenn der Parameter k bei getInfo(k:Text) mit dem gespeicherten Schlüssel key übereinstimmt wird die Info zurück gegeben.

Implementieren und testen Sie die Klasse.

Caesar-Kryptographie

Um die Information zu schützen soll sie verschlüsselt werden mit der Caesar-Verschlüsselung.
Dabei wir die Information "abba" z.B. um drei Buchstaben verschoben zu "deed"

Entwickeln Sie die Hilfs-Operation vorbereiten(s:Text):Text die in Kleinbuchstagen umwandelt und Umlaute ersetzt als Code und als Struktogramm.

Entwickeln Sie die Hilfs-Operation -caesarCode(s:Text):Text die verschlüsselt (+3 Zeichen) als Code und Struktogramm.

Entwickeln Sie die Hilfs-Operation -caesarDeCode(s:Text):Text die den Text wieder entschlüsselt.

Vorgegebener Code

Quellcode [Verschluesseln/Caesar.java]
//https://de.wikipedia.org/wiki/Caesar-Verschlüsselung
public class Caesar{
  static String testNachricht="Wir müssen zu Fuß gehen";
  static String testNachricht2="wir schreiben eine arbeit";
 
  static String vorbereiten(String s){
    int i;
    String aus="";
    char c;
    s=s.toLowerCase(); // In Kleinbuchstaben umwandeln
    // Umlaute entfernen
    return aus;
  }
  static void test(){
    String verschl,aus;
    System.out.println(vorbereiten(testNachricht));
    verschl=caesarCode(testNachricht2,13);
    aus=caesarDeCode(verschl,13);
    System.out.println(verschl+" "+aus);
  }
  static String caesarCode(String s, int n){
    int i;
    String aus ="";
    // um n verschieben
    return aus;
  }
  static String caesarDeCode(String s, int n){
    int i;
    String aus ="";
    int c;
    // um n zurueckschieben
    return aus;
  }
}
 
Quelltext
Quellcode [Verschluesseln/CaesarLsg.java]
//https://de.wikipedia.org/wiki/Caesar-Verschlüsselung
public class CaesarLsg{
  static String testNachricht="Wir müssen zu Fuß gehen";
  static String testNachricht2="wir schreiben eine arbeit";
 
  static String vorbereiten(String s){
    int i;
    String aus="";
    char c;
    s=s.toLowerCase();
    for(i=0;i<s.length();i++){
      c=s.charAt(i);
      if(c>='a' && c<='z') aus+=c;
      else switch(c){
        case 'ä':
          aus+="ae";
          break;
        case 'ö':
          aus+="oe";
          break;
        case 'ü':
          aus+="ue";
          break;
        case 'ß':
          aus+="ss";
      }
    }
    return aus;
  }
  static void test(){
    String verschl,aus;
    System.out.println(vorbereiten(testNachricht));
    verschl=caesarCode(testNachricht2,13);
    aus=caesarDeCode(verschl,13);
    System.out.println(verschl+" "+aus);
  }
  static String caesarCode(String s, int n){
    int i;
    String aus ="";
    for(i=0;i<s.length();i++){
      if(s.charAt(i)==' ')aus+=' ';
      else aus+= (char)((s.charAt(i)-'a'+n)%26+'a');
    }
    return aus;
  }
  static String caesarDeCode(String s, int n){
    int i;
    String aus ="";
    int c;
    for(i=0;i<s.length();i++){
      if(s.charAt(i)==' ')aus+=' ';
      else{
        c=s.charAt(i)-'a'-n;
        if(c<0)c+=26;
        aus+= (char)(c%26+'a');
      }
    }
    return aus;
  }
}
Struktogramm vorbereiten Struktogramm
Struktogramm caesarCode Struktogramm

Kryptographie mit Umordnung

Kryptographie mit Buch (One-Time-Pad)