Monoalphabetische Substitution

Da die Verschiebung des Alphabets durch die Caesar-Verschlüsselung zu wenig Sicherheit bietet, ordnet die monoalphabetische Substitution jedem Buchstaben des Alphabets zufällig einen anderen Buchstaben des Alphabets zu. Es ergeben sich 26! mögliche Schlüssel.

Einfache Umsetzung

Auch hier ist zunächst wieder eine Zuordnung der Buchstaben in einer switch-Anweisung denkbar:

public String verschluessele(String klartext) {

     String ergebnis = "";

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

      switch (klartext.charAt(i)) {        
        case 'A': { ergebnis = ergebnis + 'Q'; break; }
        case 'B': { ergebnis = ergebnis + 'W'; break; }
        case 'C': { ergebnis = ergebnis + 'E'; break; }
        case 'D': { ergebnis = ergebnis + 'R'; break; }
        case 'E': { ergebnis = ergebnis + 'T'; break; }
        case 'F': { ergebnis = ergebnis + 'Z'; break; }
        case 'G': { ergebnis = ergebnis + 'U'; break; }
        case 'H': { ergebnis = ergebnis + 'I'; break; }
        case 'I': { ergebnis = ergebnis + 'O'; break; }
        case 'J': { ergebnis = ergebnis + 'P'; break; }
        case 'K': { ergebnis = ergebnis + 'A'; break; }
        case 'L': { ergebnis = ergebnis + 'S'; break; }
        case 'M': { ergebnis = ergebnis + 'D'; break; }
        case 'N': { ergebnis = ergebnis + 'F'; break; }
        case 'O': { ergebnis = ergebnis + 'G'; break; }
        case 'P': { ergebnis = ergebnis + 'H'; break; }
        case 'Q': { ergebnis = ergebnis + 'J'; break; }
        case 'R': { ergebnis = ergebnis + 'K'; break; }
        case 'S': { ergebnis = ergebnis + 'L'; break; }
        case 'T': { ergebnis = ergebnis + 'Y'; break; }
        case 'U': { ergebnis = ergebnis + 'X'; break; }
        case 'V': { ergebnis = ergebnis + 'C'; break; }
        case 'W': { ergebnis = ergebnis + 'V'; break; }
        case 'X': { ergebnis = ergebnis + 'B'; break; }
        case 'Y': { ergebnis = ergebnis + 'N'; break; }
        case 'Z': { ergebnis = ergebnis + 'M'; break; }
        default:  { ergebnis = ergebnis + klartext.charAt(i); }    
      }          

     }

     return ergebnis;    

}

Geschickte Umsetzung (Schlüssel als Zeichenkette)

Bei der ersten geschickten Alternative wird der Schlüssel als Zeichenkette mit 26 Buchstaben repräsentiert (z.B. analog zur Umsetzung oben: "QWERTZUIOPASDFGHJKLYXCVBNM"). Bei der Umwandlung eines Klartextbuchstaben wird dieser in eine fortlaufende Nummer umgewandelt (also z.B. A in 0). Diese Nummer gibt an, an welcher Stelle der Schlüssel-Zeichenkette der zugeordnete Geheimtextbuchstabe zu finden ist.

public String verschluesseleSchlau(String zeichenkette, String schluessel) {

   String ergebnis = "";

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

       int zahl = ((int) zeichenkette.charAt(i)) - 64 - 1;

       ergebnis = ergebnis + schluessel.charAt(zahl);
    }

    return ergebnis;
}

Geschickte Umsetzung (Schlüssel als Feld)

Die zweite Alternative ähnelt der ersten. Hier wird der Schlüssel als Feld über 26 Buchstaben statt als Zeichenkette repräsentiert. Bei der Umwandlung eines Klartextbuchstaben wird dieser wieder in eine fortlaufende Nummer umgewandelt (also z.B. A in 0). Diese Nummer gibt hier an, an welcher Stelle des Feldes der zugeordnete Geheimtextbuchstabe zu finden ist.

public String verschluesseleSchlau(String zeichenkette, char[] schluessel) {

   String ergebnis = "";

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

       int zahl = ((int) zeichenkette.charAt(i)) - 65;

       ergebnis = ergebnis + schluessel[zahl];
    }

    return ergebnis;
}

results matching ""

    No results matching ""