第二次世界大戦でナチスにより用いられ、解読困難なことで有名なエニグマ(Enigma)暗号器をPythonで再現した。
エニグマ暗号器の複雑さは、文字を変換する度に変換器のローターが回ることによって生み出され、そのために同じ文字でも毎回違う形で変換される。なお、図解は以下のカラパイアの記事を参照のこと。
また、以下のページでは実際にローターが回って文字が変換できる仕組みを体験できる。
プログラムを使用するためには、作業用フォルダにenigma.pyを設置した後、コマンドプロンプトより起動する(カレントディレクトリを作業用フォルダに指定することをお忘れなく)。
起動方法は、
python enigma.py pack/unpack 文字列
のようにする。引数にpackを指定すると文字列より暗号文を作成し、unpackを指定すると暗号文よりもとの文字列を表示する。なお、文字列はアルファベットにのみ対応しており、スペース等は使えない。
例)python enigma.py pack AABB
→ YEVT が表示される
python enigma.py unpack YEVT
→ AABB が表示される。
プログラムのhand1, hand2(第1・第2ローターの針の位置。ここを越えると上位ローターが回転する)、rot_state1, rot_state2, rot_state3(文字を変換する組み合わせを生成するための乱数シード)、chr1, chr2, chr3(第1・第2・第3ローターの初期値)は可変であり、ここを変更することで独自の変換器を作ることができる。
コメント