#はじめに
CTFを始めたらシーザー暗号と言うものが出てきたので復号処理が必要になった。
手作業でも出来るけどここはプログラムでしょ!リハビリにもなるし!と言う事で早速書いてみた。
私のマシンにはPythonの開発環境しか無かったのでPythonでGo!
#シーザー暗号とは
復号するためにはどんなアルゴリズムで生成された暗号なのかを知らなければいけない。
シーザー暗号は文字を3文字ずつシフトして生成する。ほうほうシンプル!
※特に3文字じゃなくても良いそう。
参考サイト:https://ja.wikipedia.org/wiki/シーザー暗号
#暗号化と復号化のプログラム
まずは暗号化を。
平文を1文字ごとに指定のキー(数)でシフトする。
大文字小文字は別なので今回は英小文字のみで組む。
英文字は25個なのでぐるっと回るように注意。
適当な文字列「wjrslairznb」を暗号化!
def crypt(plainStr, shiftInt):
resultStr = ""
for char in plainStr:
if ord(char) + shiftInt > ord('z'):
resultStr = resultStr + chr(ord(char) + shiftInt - 26)
else:
resultStr = resultStr + chr(ord(char) + shiftInt)
print('crypt:' + resultStr)
復号化は単純に逆に計算しただけです…
def decrypt(cryptoStr, shiftInt):
resultStr = ""
for char in cryptoStr:
if ord(char) - shiftInt < ord('a'):
resultStr = resultStr + chr(ord(char) - shiftInt + 26)
else:
resultStr = resultStr + chr(ord(char) - shiftInt)
print('decrypt:' + resultStr)
#余談:シーザー暗号って暗号としては簡単過ぎるけど使えるの?
使えない。脆弱ぅ!!
古代ローマに作られた暗号なので、昔は有効だったのでしょうと言う事。
暗号に歴史あり。
#おわりに
実はプログラムは久しぶりでしかもPython環境はあるのにほとんど触った事ないしでとても楽しかった。
この手のプログラムはググれば山程出てくるけどまずは自分で書いてみて、後で天才的なコードを見て答え合わせをするのが好きです。