Contexte
Il y a cent treize ans, le cryptographe amateur Félix Delastelle a publié son travail sur le chiffre à quatre carrés , un chiffre de substitution digraphique qui accepte deux permutations d'un alphabet de 25 lettres comme clés et code les messages constitués de ces lettres.
Comme la plupart des chiffrements à plume et papier, le chiffre à quatre carrés n'a pas de valeur cryptographique aujourd'hui, mais au moment de son invention, il avait un avantage significatif sur ses homologues monographiques.
Cent treize ans plus tard, Alice Delastelle décide d'améliorer le chiffre à quatre carrés en augmentant la taille de l'alphabet et le nombre de clés. [citation requise]
Configuration des touches
L'alphabet contient les caractères suivants (en commençant par un espace):
!"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ
Étant donné une phrase de passe, nous construisons une permutation de cet alphabet comme suit:
Ne conservez que la première occurrence de chaque caractère.
Ajoutez les caractères inutilisés de l'alphabet, dans leur ordre naturel.
Après avoir transformé quatre phrases de passe en quatre clés, nous divisons chaque clé en un carré de longueur de côté 7 et organisons les quatre carrés résultants de sorte qu'ils forment un grand carré.
Par exemple, si les phrases de passe étaient
PROGRAMMING PUZZLES & CODE GOLF
POPULARITY CONTESTS & CODE BOWLING
CORRECT HORSE BATTERY STAPLE
DON'T TELL EVE!!!
les clés seraient construites et disposées comme ceci:
PROGAMI POULARI
N UZLES TY CNES
&CDF!"# &DBWG!"
$%'()*+ #$%'()*
,-./:;< +,-./:;
=>?@BHJ <=>?@FH
KQTVWXY JKMQVXZ
CORET H DON'T E
SBAYPL! LV!"#$%
"#$%&'( &()*+,-
)*+,-./ ./:;<=>
:;<=>?@ ?@ABCFG
DFGIJKM HIJKMPQ
NQUVWXZ RSUWXYZ
Chiffrement
Étant donné un message en clair tel que
ALICE LOVES BOB.
nous ajoutons 0 ou 1 espace pour rendre sa longueur uniforme et la divisons en paires de caractères:
["AL" "IC" "E " "LO" "VE" "S " "BO" "B."]
Pour chaque paire de caractères, nous localisons le premier caractère dans le premier carré (ordre de lecture) et le second dans le quatrième.
Ensuite, nous choisissons les caractères dans les carrés restants de telle sorte que les quatre caractères sélectionnés forment un rectangle dont les côtés sont parallèles aux côtés des carrés.
Enfin, nous remplaçons la paire de caractères par les caractères sélectionnés des deuxième et troisième carrés.
Pour notre exemple de chaîne, cela donne
["PP" "A@" "E " "YT" "ZE" "EH" "=T" "<-"]
résultant dans le texte chiffré suivant:
PPA@E YTZEEH=T<-
Tâche
Écrivez un programme ou une fonction qui accepte quatre phrases de passe et un texte en clair, utilise la variante ci-dessus du chiffre à quatre carrés pour le chiffrer et renvoie le texte chiffré résultant.
Détails:
Les cinq chaînes d'entrée seront composées uniquement de caractères de l'alphabet mentionné.
Les cinq chaînes d'entrée peuvent être lues dans n'importe quel ordre, comme tel, une chaîne unique délimitée par des retours à la ligne ou comme un tableau de cinq chaînes.
Vous pouvez supposer qu'aucune des chaînes n'est vide.
La sortie doit être une seule chaîne.
Si vous choisissez d'imprimer la sortie sur STDOUT, vous pouvez imprimer uniquement les caractères du texte chiffré et (éventuellement) une nouvelle ligne de fin.
Les règles de code-golf standard s'appliquent.
Cas de test
Dans tous les cas de test, les quatre premières chaînes correspondent aux carrés clés dans l'ordre de lecture et la dernière chaîne d'entrée au texte en clair.
Contribution
PROGRAMMING PUZZLES & CODE GOLF
POPULARITY CONTESTS & CODE BOWLING
CORRECT HORSE BATTERY STAPLE
DON'T TELL EVE!!!
ALICE LOVES BOB.
Production
PPA@E YTZEEH=T<-
Contribution
!"#$%&'()*+,-./:;<=>
!"#$%&'()*+,-./:;<=>?@ABCDE
!"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKL
!"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRS
HELLO, WORLD!
Production
LALLR)#TROKE !
Contribution
,'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!
Production
#>TE,VK+,ZQ(&<[email protected]@DM%NAC&>
Contribution
& %(,-#)$@?/=>'*"<:;!.+
=/$- ?;',@#!(&<")%.:>+*
&%-/<?.;$'#:=!( ,>"+*)@
=,<-*?#.'@/;>%!+:(& ")$
HNRA#JX$H %JAV+"GTS,
Production
GOOD LUCK, HAVE FUN.
la source
Pyth -
88868378767572 octets8 octets enregistrés grâce à @orlp .
Waaay trop longtemps, je suis assez mécontent de cela, mais je le poste juste pendant que je cherche une meilleure façon de gérer les carrés.
Essayez-le en ligne ici .
la source
c+e.z*%le.z2d2
parC.tce.z2d
. Ne demandez pas :)