Hintergrund
Vor einhundertdreizehn Jahren veröffentlichte der Amateur-Kryptograf Félix Delastelle seine Arbeit über die vierquadratische Chiffre , eine digraphische Substitutionschiffre, die zwei Permutationen eines 25-Buchstaben-Alphabets als Schlüssel akzeptiert und Nachrichten kodiert, die aus diesen Buchstaben bestehen.
Wie die meisten Stift-und-Papier-Chiffren hat die vierquadratische Chiffre heute keinen kryptografischen Wert, hatte aber zum Zeitpunkt ihrer Erfindung einen signifikanten Vorteil gegenüber ihren monografischen Gegenstücken.
Einhundertdreizehn Jahre später beschließt Alice Delastelle, die vierquadratische Chiffre durch Vergrößerung des Alphabets und der Anzahl der Schlüssel zu verbessern. [Zitat benötigt]
Schlüsseleinstellung
Das Alphabet enthält die folgenden Zeichen (beginnend mit Leerzeichen):
!"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ
Mit einer gegebenen Passphrase konstruieren wir eine Permutation dieses Alphabets wie folgt:
Behalte nur das erste Vorkommen jedes Zeichens.
Fügen Sie die nicht verwendeten Zeichen aus dem Alphabet in ihrer natürlichen Reihenfolge hinzu.
Nachdem wir vier Passphrasen in vier Schlüssel umgewandelt haben, teilen wir jeden Schlüssel in ein Quadrat mit der Seitenlänge 7 und ordnen die vier resultierenden Quadrate so an, dass sie ein großes Quadrat bilden.
Zum Beispiel, wenn die Passphrasen waren
PROGRAMMING PUZZLES & CODE GOLF
POPULARITY CONTESTS & CODE BOWLING
CORRECT HORSE BATTERY STAPLE
DON'T TELL EVE!!!
Die Tasten würden folgendermaßen aufgebaut und angeordnet sein:
PROGAMI POULARI
N UZLES TY CNES
&CDF!"# &DBWG!"
$%'()*+ #$%'()*
,-./:;< +,-./:;
=>?@BHJ <=>?@FH
KQTVWXY JKMQVXZ
CORET H DON'T E
SBAYPL! LV!"#$%
"#$%&'( &()*+,-
)*+,-./ ./:;<=>
:;<=>?@ ?@ABCFG
DFGIJKM HIJKMPQ
NQUVWXZ RSUWXYZ
Verschlüsselung
Bei einer Klartextnachricht wie
ALICE LOVES BOB.
Wir fügen 0 oder 1 Leerzeichen hinzu, um die Länge zu vergleichmäßigen und teilen sie in Zeichenpaare auf:
["AL" "IC" "E " "LO" "VE" "S " "BO" "B."]
Für jedes Zeichenpaar suchen wir das erste Zeichen im ersten Quadrat (Lesereihenfolge) und das zweite im vierten.
Dann wählen wir die Zeichen in den verbleibenden Quadraten so aus, dass die vier ausgewählten Zeichen ein Rechteck bilden, dessen Seiten parallel zu den Seiten der Quadrate sind.
Schließlich ersetzen wir das Zeichenpaar durch die ausgewählten Zeichen des zweiten und dritten Quadrats.
Für unsere Beispielzeichenfolge ergibt dies
["PP" "A@" "E " "YT" "ZE" "EH" "=T" "<-"]
Daraus ergibt sich der folgende Chiffretext:
PPA@E YTZEEH=T<-
Aufgabe
Schreiben Sie ein Programm oder eine Funktion, die vier Passphrasen und einen Klartext akzeptiert, verschlüsselt es mit der obigen Variante der vierkantigen Chiffre und gibt den resultierenden Chiffretext zurück.
Einzelheiten:
Die fünf Eingabezeichenfolgen bestehen ausschließlich aus Zeichen des angegebenen Alphabets.
Die fünf Eingabezeichenfolgen können in beliebiger Reihenfolge gelesen werden, dh als einzelne Zeichenfolge, die durch Zeilenumbrüche begrenzt ist, oder als Array mit fünf Zeichenfolgen.
Sie können davon ausgehen, dass keine der Zeichenfolgen leer ist.
Die Ausgabe muss eine einzelne Zeichenfolge sein.
Wenn Sie die Ausgabe auf STDOUT drucken möchten, können Sie nur die Zeichen des Chiffretextes und (optional) eine nachgestellte neue Zeile drucken.
Es gelten die Standardregeln für Code-Golf .
Testfälle
In allen Testfällen entsprechen die ersten vier Zeichenfolgen den Schlüsselquadraten in Lesereihenfolge und die letzte Eingabezeichenfolge dem Klartext.
Eingang
PROGRAMMING PUZZLES & CODE GOLF
POPULARITY CONTESTS & CODE BOWLING
CORRECT HORSE BATTERY STAPLE
DON'T TELL EVE!!!
ALICE LOVES BOB.
Ausgabe
PPA@E YTZEEH=T<-
Eingang
!"#$%&'()*+,-./:;<=>
!"#$%&'()*+,-./:;<=>?@ABCDE
!"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKL
!"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRS
HELLO, WORLD!
Ausgabe
LALLR)#TROKE !
Eingang
,'K AB-Q=?@("W$>XM).C#<I:G!OLP*+;SZJTU%NED/&VFHRY
:,-D$C<SU=IYHFVA;! JG/M&L+WT%#.Q@(N*R")EZOBKX?'>P
L()JX,BND?Z<>P*FU%=O@&KIC+A!Y:;$SWHR.EMG'/T"QV #-
<->CI")AP Q:+U;O/F(KH&ER!MW?X'VJLZ#.$,BSGN@TD%*Y=
SPIN THE PPCG WHEEL OF BLAME!
Ausgabe
#>TE,VK+,ZQ(&<[email protected]@DM%NAC&>
Eingang
& %(,-#)$@?/=>'*"<:;!.+
=/$- ?;',@#!(&<")%.:>+*
&%-/<?.;$'#:=!( ,>"+*)@
=,<-*?#.'@/;>%!+:(& ")$
HNRA#JX$H %JAV+"GTS,
Ausgabe
GOOD LUCK, HAVE FUN.
quelle
Pyth -
88868378767572 Bytes8 Bytes gespart dank @orlp .
Warte zu lange, ich bin ziemlich unzufrieden damit, aber poste es einfach, während ich nach einer besseren Möglichkeit suche, mit den Quadraten umzugehen.
Probieren Sie es hier online aus .
quelle
c+e.z*%le.z2d2
mitC.tce.z2d
. Fragen Sie nicht :)