Schreiben Sie ein Programm, das zwei Eingabezeilen verwendet und die erste als Schlüsselphrase verwendet, um die zweite nach der Playfair-Verschlüsselungstechnik zu verschlüsseln.
Wikipedia beschreibt die Playfair-Verschlüsselung ausführlich , um jedoch Unklarheiten zu vermeiden, folgt eine kurze Zusammenfassung:
1. Generieren Sie eine Schlüsseltabelle:
Ersetzen Sie alle Vorkommen J
in der Schlüsselphrase durch und entfernen Sie I
dann alle Nicht-Alphabet- und Wiederholungszeichen. In eine 5 × 5-Verschlüsselungstabelle einfügen und die verbleibenden Zellen mit dem Rest des Alphabets füllen (außer J
, wir mögen es nicht J
).
Beispiel:
S T A C K
O V E R F
Stack Overflow --> STACKOVERFLW --> L W B D G
H I M N P
Q U X Y Z
2. Bereiten Sie die zu verschlüsselnde Nachricht vor
Ersetzen Sie jedes J
durch ein I
, entfernen Sie alle Nicht-Alphabet-Zeichen und teilen Sie sie in Paare auf. Verwenden Sie dabei ein X
, um alle Paare zu trennen, die denselben Buchstaben zweimal enthalten. Wenn Sie am Ende eine ungerade Anzahl von Buchstaben haben, fügen Sie diese X
am Ende hinzu. (Hinweis: Die Ziffern haben vollständig buchstabiert werden - ONE
, TWO
, THREE
etc. - Sie können dies aber davon ausgehen , bereits für Sie erledigt worden ist .)
Beispiel:
In:
The cat crept into the crypt, crapped, and crept out again.
Out:
TH EC AT CR EP TI NT OT HE CR YP TC RA PX PE DA ND CR EP TO UT AG AI NX
3. Verschlüsselung
Verschlüsseln Sie nacheinander jedes Buchstabenpaar. Wenn sie sich in verschiedenen Zeilen und Spalten der Schlüsseltabelle befinden, ersetzen Sie sie jeweils durch den Buchstaben aus derselben Zeile in der Spalte, in der sich der andere Buchstabe befindet (z. B. VM
⇒ EI
, LZ
⇒ GQ
). Wenn sie sich in derselben Zeile (oder Spalte) befinden, wählen Sie die beiden Zeichen unmittelbar rechts (oder darunter) aus und schließen Sie sie gegebenenfalls um (z. B. OE
⇒ VR
, ZG
⇒ KP
).
Beispiel:
In:
TH EC AT CR EP TI NT OT HE CR YP TC RA PX PE DA ND CR EP TO UT AG AI NX
Out:
SI RA CA RD FM VU IC VS MO RD ZN AK EC MZ MF BC YN RD FM SV TV KB TM MY
Der von diesem Prozess erzeugte String ist die verschlüsselte Nachricht, die Ihr Programm ausgeben soll.
Regeln:
- Der Eingabetext und der Schlüssel können von
stdin
Befehlszeilenargumenten oder anderen derartigen Quellen bezogen werden. Hardcodierte Eingaben sind nicht zulässig. - Ihr Programm muss sowohl Groß- als auch Kleinbuchstaben für die Passphrase und die Nachricht akzeptieren.
- Die verschlüsselte Ausgabe kann in Groß- oder Kleinschreibung erfolgen.
- Ihr Programm sollte Schlüsselphrasen mit einer Länge von mindestens 64 Zeichen und Nachrichtentexte von mindestens 16 KB akzeptieren.
- Sie müssen keine Nicht-ASCII-Eingaben verarbeiten.
- Sie können die Möglichkeit, dass das Buchstabenpaar
XX
während der Verschlüsselung auftritt, ignorieren . - Es ist nicht erforderlich, Leerzeichen zur Ausgabe des Programms hinzuzufügen.
- Ihre Antwort sollte ein Beispiel für eine Nachricht, eine Schlüsselphrase und eine verschlüsselte Ausgabe enthalten, die von Ihrem Programm erstellt wurden.
- Dies ist eine Code-Golf-Herausforderung, daher gewinnt die Antwort mit dem kürzesten Code (in Bytes).
HINWEIS: Bitte denken Sie daran, dass Sie aufeinanderfolgende Buchstaben nur unterbrechen müssen, wenn sie im selben Paar vorkommen . So sollte zum Beispiel
MASSACHUSETTS
verschlüsselt werden alsMA SX SA CH US ET TS
- das DoubleS
muss geteilt werden, aber das DoubleT
nicht.
J
" Haben Sie ähnliche Gefühle gegenüber APL?