배경
100 년 전과 13 년 전, 아마추어 암호 학자 인 펠릭스 델라 스텔 (Félix Delastelle) 은 25 자 알파벳의 두 순열을 키로 사용하고 그 문자로 구성된 메시지를 인코딩하는 이진 대체 암호 인 4 제곱 암호 에 관한 그의 작품을 발표했습니다 .
대부분의 펜 앤 페이퍼 암호와 마찬가지로, 4 제곱 암호는 오늘날 암호화 값이 없지만 발명 당시에는 단조 암호에 비해 상당한 이점이있었습니다.
100 년 후, 13 년 후 Alice Delastelle은 알파벳 크기와 키 수를 늘려서 4 제곱 암호를 개선하기로 결정했습니다. [인용 필요]
키 설정
알파벳에는 다음 문자가 포함됩니다 (공백으로 시작).
!"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ
암호 문구가 주어지면 다음과 같이이 알파벳의 순열을 구성합니다.
각 문자의 첫 번째 항목 만 유지하십시오.
알파벳에서 사용하지 않는 문자를 자연 순서대로 추가하십시오.
4 개의 패스 프레이즈를 4 개의 키로 전환 한 후, 각 키를 측면 길이 7의 정사각형으로 나누고 4 개의 정사각형을 배열하여 하나의 큰 정사각형을 형성합니다.
예를 들어 암호 문구가
PROGRAMMING PUZZLES & CODE GOLF
POPULARITY CONTESTS & CODE BOWLING
CORRECT HORSE BATTERY STAPLE
DON'T TELL EVE!!!
키는 다음과 같이 구성되고 배열됩니다.
PROGAMI POULARI
N UZLES TY CNES
&CDF!"# &DBWG!"
$%'()*+ #$%'()*
,-./:;< +,-./:;
=>?@BHJ <=>?@FH
KQTVWXY JKMQVXZ
CORET H DON'T E
SBAYPL! LV!"#$%
"#$%&'( &()*+,-
)*+,-./ ./:;<=>
:;<=>?@ ?@ABCFG
DFGIJKM HIJKMPQ
NQUVWXZ RSUWXYZ
암호화
다음과 같은 평문 메시지가 제공됩니다.
ALICE LOVES BOB.
우리는 길이를 균일하게 만들고 문자 쌍으로 나누기 위해 0 또는 1 개의 공백을 추가합니다.
["AL" "IC" "E " "LO" "VE" "S " "BO" "B."]
각 문자 쌍에 대해 첫 번째 문자 (읽기 순서)에서 첫 번째 문자를 찾고 네 번째 문자에서 두 번째 문자를 찾습니다.
그런 다음 나머지 사각형의 문자를 선택하여 선택한 네 개의 문자가 사각형의 측면과 평행 한면을 갖는 사각형을 형성합니다.
마지막으로 문자 쌍을 두 번째 및 세 번째 사각형의 선택된 문자로 바꿉니다.
예제 문자열의 경우
["PP" "A@" "E " "YT" "ZE" "EH" "=T" "<-"]
다음과 같은 암호문이 생성됩니다.
PPA@E YTZEEH=T<-
직무
4 개의 암호문과 평문을 허용하고 위의 4 제곱 암호 변형을 사용하여이를 암호화하고 결과 암호문을 리턴하는 프로그램 또는 함수를 작성하십시오.
세부:
5 개의 입력 문자열은 언급 된 알파벳의 문자로만 구성됩니다.
5 개의 입력 문자열은 줄 바꿈으로 구분 된 단일 문자열 또는 5 개의 문자열 배열과 같이 임의의 순서로 읽을 수 있습니다.
빈 문자열이 없다고 가정 할 수 있습니다.
출력은 단일 문자열이어야합니다.
출력을 STDOUT으로 인쇄하도록 선택한 경우 암호 텍스트의 문자와 후행 줄 바꿈 (선택 사항) 만 인쇄 할 수 있습니다.
표준 코드 골프 규칙이 적용됩니다.
테스트 사례
모든 테스트 사례에서 처음 4 개의 문자열은 읽기 순서의 키 제곱에 해당하고 마지막 입력 문자열은 일반 텍스트에 해당합니다.
입력
PROGRAMMING PUZZLES & CODE GOLF
POPULARITY CONTESTS & CODE BOWLING
CORRECT HORSE BATTERY STAPLE
DON'T TELL EVE!!!
ALICE LOVES BOB.
산출
PPA@E YTZEEH=T<-
입력
!"#$%&'()*+,-./:;<=>
!"#$%&'()*+,-./:;<=>?@ABCDE
!"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKL
!"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRS
HELLO, WORLD!
산출
LALLR)#TROKE !
입력
,'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!
산출
#>TE,VK+,ZQ(&<F@RA.NL@DM%NAC&>
입력
& %(,-#)$@?/=>'*"<:;!.+
=/$- ?;',@#!(&<")%.:>+*
&%-/<?.;$'#:=!( ,>"+*)@
=,<-*?#.'@/;>%!+:(& ")$
HNRA#JX$H %JAV+"GTS,
산출
GOOD LUCK, HAVE FUN.