より強力な4平方暗号


17

バックグラウンド

100年と13年前、アマチュア暗号学者のフェリックス・デラステッレは、25字のアルファベットの2つの順列をキーとして受け入れ、それらの文字で構成されるメッセージをエンコードする4乗暗号に関する研究を発表しました。

ほとんどのペンと紙の暗号と同様に、4平方暗号は現在暗号的な価値を持ちませんが、発明の時点では、モノグラフの暗号よりも大きな利点がありました。

100年後、13年後、アリス・デラステッレは、アルファベットのサイズとキーの数を増やすことで4平方暗号を改善することにしました。[引用が必要]

キー設定

アルファベットには次の文字が含まれます(スペースで始まる):

 !"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ

パスフレーズを指定すると、次のようにこのアルファベットの順列を作成します。

  1. 各文字の最初の出現のみを保持します。

  2. アルファベットの未使用文字を自然な順序で追加します。

4つのパスフレーズを4つのキーに変換した後、各キーを辺の長さ7の正方形に分割し、結果の4つの正方形を配置して1つの大きな正方形を形成します。

たとえば、パスフレーズが

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."]

各文字ペアについて、最初の正方形(読み取り順序)の最初の文字と、4番目の2番目の文字を見つけます。

次に、選択した4つの文字が四角形を形成し、その辺が正方形の辺に平行になるように、残りの正方形の文字を選択します。

最後に、文字ペアを2番目と3番目の正方形の選択した文字に置き換えます。

この例の文字列では、これにより

["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.

回答:


4

CJam、52 50 49 47 46 44バイト

l2/qN/'[,32>A,s-f|2/f{~@S+2<.#_7f%_W%.m.m.=}

入力順序はlines 5, 2, 3, 1, 4です。オンラインでお試しください

(@MartinBüttnerのおかげで1バイト、@ Dennisのおかげで-2バイト)

説明

l2/           Read the message and split into chunks of 2
qN/           Read rest of input and split by newlines (pass phrases)
'[,32>        Generate " !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ"
A,s-          Remove digits 0123456789
f|            Setwise OR with each pass phrase to remove duplicates, giving keys
2/            Split keys into two pairs
f{ ... }      For each message chunk...
  ~             Unwrap key pairs
  @S+2<         Add a space to the message chunk then cap to length 2
  .#            Find the two chars in keys 1, 4
  _7f%          Copy indices and perform modulo 7 on both
  _W%           Copy and reverse
  .m.m          Vectorised subtraction twice
  .=            Apply both indices to keys 2, 3

インデックスの場合、最下位の数字である7を交換します。たとえば、最初の例でALは、インデックス47キー1および4をそれぞれ使用します。ベース7では、これは[0 4]および[1 0]です。最下位桁を交換する[0 0][1 4]、とが得られます。011、及びこの対応するPP、それぞれのキー2と3インチ

ただし、ベース変換の代わりに、コードは次のことを行います。

[4 7]     A: Initial indices
[4 0]     B: Indices mod 7
[0 4]     C: Reverse of B

[4 -4]    B-C
[0 11]    A-(B-C)

6

Pyth、74 71バイト

L+%eb7*7/hb7Jcms+oxdN{d--CMr33 91`MTd.z2ssm@VeJ,ydy_dCmxLhdedC,hJ.tcz2d

おそらく多くの最適化が可能です。私は多くの圧縮を使用します。

次の順序で入力を受け取ります。

ALICE LOVES BOB.
PROGRAMMING PUZZLES & CODE GOLF
DON'T TELL EVE!!!
POPULARITY CONTESTS & CODE BOWLING
CORRECT HORSE BATTERY STAPLE

入力順序のアイデアを盗むことはできますか?
マルティセン

@Maltysen確かに。
orlp

4

Pyth - 88 86 83 78 76 75 72バイト

@orlpのおかげで8バイト節約

長すぎて、私はこれにはかなり不満ですが、正方形を処理するためのより良い方法を探している間にそれを投稿するだけです。

Jm+oxdN{d-+d-CMr33 91`MTd.zsms@VtPJ,+*7hKs.DR7xV,hJeJdeK+*7@K2@K1C.tcz2d

こちらからオンラインでお試しください


あなたは置き換えることができc+e.z*%le.z2d2C.tce.z2d。尋ねないでください:)
orlp
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.