/** Diese Klasse realisiert die so genannte XOR-Verschluesselung */
public class XorEncoder extends Encoder {

  /** Hier wird der geheime Schluessel abgespeichert */
  private int key;

  /** Konstruktor. Dem Objekt wird der
      geheime Schluessel uebergeben */
  public XorEncoder(int key) {
    this.key = key;
  }

  /** Verschluesselt einen String anhand
      eines gegebenen Schluessels */
  public String encode(String s) {
    // Wandle den String in ein char-Array um
    // (toCharArray ist Methode der Klasse String)
    char[] c = s.toCharArray(); 
    // Wende auf die einzelnen Zeichen die XOR-Verschluesselung an
    for (int i=0;i<c.length;i++)
      c[i]=(char)(c[i]^key);
    // Gib das verschluesselte Feld als Array zurueck
    return new String(c);
  }

  /** Entschluesselt einen String anhand eines
      gegebenen Schluessels */
  public String decode(String s) {
    // Bei der einfachen XOR-Verschluesselung
    // sind Ver- und Entschluesselung identisch.
    // Wir koennen also die Methode encode verwenden
    return encode(s);
  }

}
