プニグマ Punigma
第二次世界大戦でドイツ軍が使用した暗号機、エニグマ (Enigma) をモデルにしたプログラムです。
エニグマは電気を使用した機械式で、キーボードとアルファベットの各文字に対応したランプがあり、キーボードで文字を押すと変換された別の文字が点灯する仕組みになっています。
キーボードとランプは、回転する数枚のローターとリフレクターによってつながっており、この機構によって文字を変換します。一枚のローターの両側にはアルファベットの文字数と同じ数の電気を通す端子がついていて、片側の端子は反対側の別の位置の端子に結線されています。文字は、端子と結線を通り別の文字に変換され、さらに、1文字変換するごとにローターが回転することによって解読を難しくしています。
このプログラムでは、単純な1枚のローターで暗号化します。リフレクターもありません。
端子は‘A’→‘K’に、‘K’→‘A’のように2文字が対になって変換されるよう結線します。そして、1文字変換するごとにローターを1文字分回転させます。
暗号化するには、ローターの位置をセットし、暗号化したい文字を順番に入力します。
複合化するには、暗号化した時と同じ位置にローターをセットし、暗号化された文字を順番に入力します。
使用方法
左側にキーボードの様子を表すアルファベットを、その右側にローターの状態を表示しています。ローターの中央に表示しているアルファベットが、現在のローターの位置です。
その下の行に、入力された文字列と変換した文字列が表示されます。左側が入力した文字列で、右側が変換した文字列です。
- A~Z のキーを押すと、文字を変換し、ローターが回転します。
- 1~9 のキーを押すと、その数だけローターが回転します。暗号化、複合化の前にローターの位置をセットするため、使用します。
- 0 など、他のキーを押すとプログラムを終了します。
暗号化
ローターを‘F’にセットして、文字列“HELLO”を暗号化します。
1~9の数字を入力するとローターが回転します。
A~Zを入力すると右側に変換した文字を表示します。
0を入力するとプログラムを終了します。
------------------------
Q W E R T Y U I O P |||
A S D F G H J K L |A|
Z X C V B N M |||
5------------------------
Q W E R T Y U I O P |||
A S D F G H J K L |F|
Z X C V B N M |||
h------------------------
Q W E R T Y U I O P |||
A S D F G H J K L |G|
Z X C V B N M |||
H S
e------------------------
Q W E R T Y U I O P |||
A S D F G H J K L |H|
Z X C V B N M |||
HE SV
l------------------------
Q W E R T Y U I O P |||
A S D F G H J K L |I|
Z X C V B N M |||
HEL SVC
l------------------------
Q W E R T Y U I O P |||
A S D F G H J K L |J|
Z X C V B N M |||
HELL SVCG
o------------------------
Q W E R T Y U I O P |||
A S D F G H J K L |K|
Z X C V B N M |||
HELLO SVCGD
複合化
ローターを暗号化した時と同じ‘F’にセットして、暗号化された文字列“SVCGD”を入力します。
1~9の数字を入力するとローターが回転します。
A~Zを入力すると右側に変換した文字を表示します。
0を入力するとプログラムを終了します。
------------------------
Q W E R T Y U I O P |||
A S D F G H J K L |A|
Z X C V B N M |||
5------------------------
Q W E R T Y U I O P |||
A S D F G H J K L |F|
Z X C V B N M |||
s------------------------
Q W E R T Y U I O P |||
A S D F G H J K L |G|
Z X C V B N M |||
S H
v------------------------
Q W E R T Y U I O P |||
A S D F G H J K L |H|
Z X C V B N M |||
SV HE
c------------------------
Q W E R T Y U I O P |||
A S D F G H J K L |I|
Z X C V B N M |||
SVC HEL
g------------------------
Q W E R T Y U I O P |||
A S D F G H J K L |J|
Z X C V B N M |||
SVCG HELL
d------------------------
Q W E R T Y U I O P |||
A S D F G H J K L |K|
Z X C V B N M |||
SVCGD HELLO
ソース・コード