/home/algorithms/


Substitution Ciphers

Polygraphic substitution

Bei der polygraphischen substitutions Chiffrierung werden 
nicht einzelne Zeichen ersetzt sondern es werden mehrere 
Zeichen zu Blöcken zusammengefasst und dann durch andere 
Blöcke ersetzt.

Beispiel: "NCD" -> "KLF", "JTZ" -> "KFP", usw. 

Es handelt sich also wieder um eine Substitution, bei der 
allerdings die Häufigkeit von einzelnen Zeichen besser 
verschleiert wird als bei monoalphabetischen Chiffrierungen.
Dafür treten Bi- oder Trigramme mehr in den Vordergrund, 
die allerdings eine etwas bessere Zeichen-Entropie besitzen 
als Monogramme.

Playfair cipher

1854 wurde der sog. "Playfair" Algorithmus von Sir Charles 
Wheatstone erfunden und von Lyon Playfair public gemacht.
Er wurde dann von den Briten im ersten Weltkrieg benutzt 
um kriegsrelevante Texte zu verschlüsseln.

Jeder Block besteht aus zwei Zeichen. Zuerst muss ein Schüssel
erzeugt werden. Dazu wird ein Schlüsselwort in eine 5x5 Matrix
geschrieben. Zeichen die doppelt vorkommen werden gelöscht und
die Matrix wird mit dem restlichen Alphabet gefüllt:

z.B. k = "HALLO PLAYFAIR CIPHER"
H A L L O
  P L A Y
F A I R  
C I P H E
R        
wird zu:
H A L O P
Y F I/J R C
E B D G K
M N Q S T
U V W X Z
Das Alphabet hat 26 Buchstaben, eine 5x5 Matrix jedoch nur 25, 
daher teilen sich I und J ein Feld, was natürlich den 
Algorithmus etwas schwächt, allerdings ist dies 
vernachlässigbar.

Es wird nun nach folgendem Schema-Chiffriert:

Zuerst werden Paare aus dem Plaintext gebildet:

HALLO WELT DAS IST SCHÖN!
HA LL OW EL TD AS IS TS CH ON

und dann werden die Paare wie folgt codiert:
 
1. Beide Zeichen liegen in einer Zeile:
H A L O P
Y F I/J R C
E B D G K
M N Q S T
U V W X Z



Es werden jeweils die beiden Zeichen 
rechts davon als Chiffre notiert.


EB -> GK

2. Beide Zeichen liegen in einer Spalte:
H A L O P
Y F I/J R C
E B D G K
M N Q S T
U V W X Z
Es werden jeweils die beiden Zeichen
darunter davon als Chiffre notiert. Falls der Rand der Matrix erreicht wird, wird einfach am anderen Ende wieder angefangen. FV -> BA
3. Das Paar liegt weder in einer Spalte noch in einer Zeile:
H A L O P
Y F I/J R C
E B D G K
M N Q S T
U V W X Z
Erstes Zeichen des Chiffre befindet sich 
in der Zeile des ursprünglichen 
Zeichens. (F->R).

Zweites Zeichen des Chiffre befindet sich 
in der Spalte des ursprünglichen 
Zeichens. (S->N).



Also:
x =    HA LL OW EL TD AS IS TS CH ON
e(x) = AL OO LX DH QK ON RQ MT YP AS

Für die Entschlüsselung müssen die Punkte 1-3 rückwärst durchlaufen
werden.

Implementation:

Quellcode in C (von PC Leyland)
Copyright (c) 1994 by PC Leyland, pcl@ox.ac.uk