モジュール詳細:アンフェア暗号
フェアにプレイする気はないようだ。
このモジュールには2つのディスプレーがある。上のディスプレーには暗号化されたメッセージが表示されている。LEDの列は現在のステージ数を表している。
右のディスプレーを押すと、白字で表示されるモジュールIDと、赤字で表示されるモジュールが認識したミスの回数の表示で切り替わる。これらはどちらもローマ数字で表示される。
このモジュールにおいて、ミスの回数を参照する場合、必ずこの赤字で表示されたミスの回数を参照する。
モジュールによって暗号化されたメッセージは、3文字の命令を繋げたものである。これは異なる鍵を使ったプレイフェア暗号によって暗号化される。すべての正しい入力を行うとモジュールが解除される。
- 暗号化の手順は次の通りである: 原文 → 鍵Aによる暗号化 → 鍵Cによる暗号化 → カエサル暗号。これらを逆順に復号すると元の命令を得られる。
鍵A
- 最初に、爆弾のシリアルナンバーを参照する。
-
すべての英字を、その英字のアルファベットでの位置の数字で置き換える(A=1、B=2...)
- これにより、数字のみで構成された文字列を得る。
- ただし、最初の文字が英字でそのアルファベットでの位置が20以上である場合、その文字を無視する。
-
シリアルナンバーの4つ目か5つ目の文字が母音であった場合、最後の数字を取り除く。
- どちらも母音であった場合でもこの操作は一度しか行われない。
- この数字を十六進数に変換する。詳細の方法については、付録:D3K2H3Xを参照する。
- 十六進数を、数字と英字で構成された文字列として見る。左から順にみて、すべての数字に以下の操作を行う:
- その数字の後の文字も数字で、その数字と合わせると10から26の間の数字を構成する場合、その2桁の数字を、アルファベットでの位置がその数字である英字1文字と置き換える。
- そうでない場合、その1桁の数字をアルファベットでの位置がその数字である英字1文字と置き換える。数字が0である場合、その数字を無視する。
- モジュールID、ポートプレートの数、バッテリーホルダーの数を、それぞれアルファベットでの位置がその数字である英字1文字に変換する。ただし、値が0である場合、それを無視する。値が1 ~ 26の範囲外である場合、範囲内になるまで26を足し引きする。
- 得られた1~3文字の英字を、これまでの結果の最後に結合する。
- これが鍵Aである。