2行の入力を受け取り、最初のフレーズをキーフレーズとして使用して、Playfair暗号化技術に従って2番目のフレーズを暗号化するプログラムを作成します。
ウィキペディアではPlayfair暗号化についてある程度詳しく説明していますが、あいまいさを避けるために、簡単な要約を以下に示します。
1.キーテーブルを生成します。
Jキーフレーズ内のすべての出現をで置き換えI、アルファベット以外の文字と繰り返し文字をすべて削除します。5x5暗号化テーブルに挿入し、残りのセルにアルファベットの残りを入力します(ただしJ、;は好きではありませんJ)。
例:
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.暗号化するメッセージを準備する
すべてJをで置き換えI、アルファベット以外の文字をすべて削除し、ペアを使用Xして、同じ文字を含むペアを2回分割します。奇数の文字で終わる場合Xは、末尾に追加します。(注:数字がいっぱいにスペルアウトする必要がある- 、ONE、TWO、THREEなど-しかし、あなたは、これはすでにあなたのために行われていると仮定することができます。)
例:
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.暗号化
文字の各ペアを順番に暗号化します。キーテーブルの異なる行と列にある場合、それぞれを他の文字が見つかった列の同じ行の文字で置き換えます(例、VM⇒ EI、LZ⇒ GQ)。同じ行(または列)にある場合は、すぐ右(または下)にある2文字を選択し、必要に応じて折り返します(例、OE⇒ VR、ZG⇒ KP)。
例:
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
このプロセスで生成される文字列は暗号化されたメッセージであり、プログラムが出力する必要があります。
ルール:
- 入力テキストとキーは
stdin、コマンドライン引数またはその他のソースから取得できます。ハードコードされた入力は許可されていません。 - プログラムは、パスフレーズとメッセージに大文字と小文字の両方のテキストを受け入れなければなりません。
- 暗号化された出力は大文字でも小文字でもかまいません。
- プログラムは、少なくとも64文字のキーフレーズと、少なくとも16 KBのメッセージテキストを受け入れる必要があります。
- 非ASCII入力を処理する必要はありません。
XX暗号化中に文字ペアが発生する可能性は無視できます。- プログラムの出力に空白を追加する必要はありません。
- 回答には、プログラムの例、メッセージ、キーフレーズ、暗号化された出力の例を含める必要があります。
- これはコードゴルフチャレンジであるため、最短のコード(バイト単位)で答えが勝ちます。
注:連続した文字が同じペアで表示される場合にのみ、分割する必要があることに注意してください。したがって、たとえば
MASSACHUSETTS、暗号化する必要がありますMA SX SA CH US ET TS—ダブルSは分割する必要がありますが、ダブルTは分割しません。
J」あなたはAPLについて同様の感情を抱いていますか?