ksnctfの2問目
http://ksnctf.sweetduet.info/problem/2
まぁ知ってる人は見た瞬間に分かると思うけど、シーザー暗号を解読する問題(-ω-)
で、問題になるのは何文字シフトすればいいか。
コツとしては、1文字~3文字で出現頻度の多い文字列を探す。
この問題だと、「vf」が多く使われていることが分かる。
ここで、一般的に英語の文章では、「a」、「is」、「the」などの単語が多く使われているので、
「vf」は「is」に置換できるんじゃないかと予想する。
シフト数を計算してみると、
v → i は13文字
f → s も13文字
さらに、一文字の単語で「n」が多く出現しているので、
「n」を13文字ずらしてみると・・・「a」になる。
以上のことから、この問題はROT13であると予想できる。
あとはネット上でROT13を計算できるサイトを探して復号すれば解ける!
(ただし、大文字・小文字が混ざってるから注意)
自分はPythonの勉強をしているところだったので、Pythonでプログラムを組んで復号してみた。
流れとしては・・・
文字列読み込み → リストに1文字ずつ格納 → for文で1文字ずつ取り出す → ord関数で文字をascii値に変換 → 13文字分ずらす → chr関数で文字に戻す → 最終的に変換した文字を連結させて完成
で、出てきたのがコレ↓↓
“ROT XIII is a simple letter substitution cipher that replaces a letter with the letter XIII letters after it in the alphabet. ROT XIII is an example of the Caesar cipher, developed in ancient Rome. Flag is FLAGSwagxBJSAMqwxxAU. Insert an underscore immediately after FLAG.”
FLAGの後にアンダースコアを入れてーってことなので、答えは・・・
“FLAG_SwagxBJSAMqwxxAU”
以上で終わり!
まぁ解説する必要もないくらい簡単だけど、備忘録ということで(。・ω・)ノ
ってか、Pythonならプログラム組まなくてもROT13を計算してくれるライブラリがあるとか?
でもCTFで使うとしたら自分でプログラム作っておいた方が楽かも(´∀`)