Python 言語で記述された古典暗号のプログラムのサンプルを紹介します.
Python 言語で公開鍵暗号などの現代暗号も実装できますが,Python 言語のみで実装するのは性能的に問題があり実用的とは言えません(アルゴリズムの検証など試験的な実装には有効). 性能的にクリティカルな処理は C 言語で記述した暗号ライブラリがあります. (→ Python 暗号ライブラリ)
古典暗号に関しては,Python 言語の機能を利用してコンパクトに実装できます.
シーザ暗号(シフト暗号)による暗号化 / 復号を行うプログラムです.ソースプログラムは,caesar.py です.
プログラムは,pythonコマンドにより以下のよう起動します.
python caesar.py [-h] text key [{enc | dec | anl}] パラメータ: -h: ヘルプメッセージの表示 text: 対象文字列(英数字の平文または暗号文) key: 鍵(整数値) {enc|dec|anl}: 暗号化(enc)/復号(dec)/解析(anl) を選択. 省略時は enc
enc を指定した場合,text で指定した文字列(平文)を暗号化します. dec を指定した場合,text で指定した文字列(暗号文)を復号します. anl を指定した場合,鍵を 1~25 に変化させた暗号文の復号結果を表示します(鍵の推定).
ヴィジュネル暗号による暗号化 / 復号を行うプログラムです.ソースプログラムは,vigenere.py です.
プログラムは,pythonコマンドにより以下のよう起動します.
python vigener.py [-h] text key [{enc | dec}] パラメータ: -h: ヘルプメッセージの表示 text: 対象文字列(英数字の平文または暗号文) key: 鍵(英文文字列) {enc | dec}: 暗号化 (enc),復号 (dec) を選択.省略時は enc
enc を指定した場合,text で指定した文字列(平文)を暗号化します. dec を指定した場合,text で指定した文字列(暗号文)を復号します. 鍵は対象文字列と等しいか短い英文字列を指定します.各文字のアルファベットが文字をシフトする数に対応します(a=0,b=1, c=2.・・・).
文字の入れ替え順序を示す鍵を使って暗号化 / 復号を行う鍵式転置式暗号のプログラムです.ソースプログラムは,trans.py です.
プログラムは,pythonコマンドにより以下のよう起動します.
python trans.py [-h] text key [{enc | dec}] パラメータ: -h: ヘルプメッセージの表示 text: 対象文字列(英数字の平文または暗号文) key: 鍵番号 (1~) {enc | dec}: 暗号化 (enc),復号 (dec) を選択.省略時は enc
enc を指定した場合,text で指定した文字列(平文)を暗号化します. dec を指定した場合,text で指定した文字列(暗号文)を復号します.
鍵番号は予めプログラム内で定義されている変数 key (鍵情報配列)の番号(何番目の鍵を使うか)を指定します.key は,[3,5,4,2,1] のような文字の入れ替え情報を表したリストの配列です.このリストを変更すれば,変換方法を変えられます.
平文を文字変換リストに従って1文字単位で暗号化 / 復号を行う換字式暗号のプログラムです.ソースプログラムは,subst.py です.
プログラムは,pythonコマンドにより以下のよう起動します.
python subst.py [-h] text key [{enc | dec}] パラメータ: -h: ヘルプメッセージの表示 text: 対象文字列(英数字の平文または暗号文) key: 鍵番号 (1~) {enc | dec}: 暗号化 (enc),復号 (dec) を選択.省略時は enc
enc を指定した場合,text で指定した文字列(平文)を暗号化します. dec を指定した場合,text で指定した文字列(暗号文)を復号します. 鍵番号は予めプログラム内で定義されている変数 key(文字変換リスト)の番号を指定します.
文字変換リストは,アルファベット"abcdefghijklmnopqrstuvwxyz" に対する ["KWJHUBVGTXLZIDQYSMFRNCPAEO", "WJHUBVGTXLZIDQYSMFRNCPAEOK"]のような文字の変換対応表の配列です.この配列を変更すれば,変換方法を変えられます.