ROT13をPythonで実装してみる
ROT13って何?
ROT13 または ROT-13、rot13 は単換字式暗号(シーザー暗号)の一つである。アルファベットを一文字毎に13文字後のアルファベットに置き換える。Aは Nに、 B は O に置き換えられ、以下同様である。英語の "Rotate by 13 places" の略。ネットワーク上のやりとり(電子掲示板、ネットニューズ、フォーラム等)で冗談の落ち、パズルの解法、ネタばれ情報、不快表現等を隠すのに用いられるアルゴリズムである。実際には暗号というほどのものではないが、ちょっと見に読んでしまうという事態は避けられる。雑誌などでクイズの正解を上下逆さまに印刷するが、それと似たようなものである。
実装手順
この文字はROT13で暗号化された文字です。
pboby vf sbffvy.
文字にそのまま13は足せないので、一度この文字列をASCIIの数値に変換します。
以下、ASCIIコードの数値と文字の対応表のURL。
112 98 111 98 121 32 118 102 32 115 98 102 102 118 121 46
ASCIIの数値に変換するとこうなります。
文字コードに変換してから、13を足すか引くかの条件を分岐するので、ASCIIの文字コードに変換した時
- 65〜77であれば、プラス13
- 78〜90であれば、マイナス13
- 97〜109であれば、プラス13
- 110〜123であれば、マイナス13
これで、A〜Z、a〜zの対応付けすることができます。
以下、簡単な対応表です。
A - M | 65 - 77 |
N - Z | 78 - 90 |
a - m | 97 - 109 |
n - z | 110 - 123 |
実装してみる
contents = "pboby vf sbffvy." process = "" for script in contents: num = ord(script) #space or period if num == 32 or num == 46: ascii_script = chr(num) #A - M elif num >= 65 and num <= 77: ascii_script = chr(num + 13) #N - Z elif num >= 78 and num <= 90: ascii_script = chr(num - 13) #a - m elif num >= 97 and num <= 109: ascii_script = chr(num + 13) #n - z elif num >= 110 and num <= 123: ascii_script = chr(num - 13) process += ascii_script print(process)
このプログラムをじっこうした結果
cobol is fossil.
こうなります。