さえめろ の めも🐰

さえめろの備忘録です。twitter : @sae_mero_

ksnctf #2「Easy Cipher」

他の何問かを授業中に出題され、問いてみたらとても楽しかった。
とりあえずこのksnctfを全部終わらせよう!という目標を掲げて、復習も兼ねて記事を書いていこうと思います。



問題

ksnctf - 2 Easy Cipher




解答までの道

見た感じ英文のような区切りられ方をしているし、元の英文をなんらかの法則で変換してこの文になってそう。
シーザー暗号とかの仲間っぽいかな〜と予測。

Synt vf SYNTFjmtkOWFNZdjkkNH.

そして、ここ。なんかめっちゃフラグのこと書いてそう(勘)
文の感じからするに、おそらく synt = flag という意味っぽい。

alpha = "abcdefghijklmnopqrstuvwxyz"
alphaList = list(alpha)
print(alphaList.index('s') - alphaList.index('f'))
print(alphaList.index('y') - alphaList.index('l'))
print(alphaList.index('n') - alphaList.index('a'))
print(alphaList.index('t') - alphaList.index('g'))

力技で調べて見たらビンゴっぽい?
おそらく元の文字をアルファベット順に13個進ませる、という手順で変換している感じがします。
いわゆるROT13というやつ。

ROT13 - Wikipedia



PythonにはROT13が組み込みで用意されているので、復号も簡単。

import codecs

cipher = "EBG KVVV vf n fvzcyr yrggre fhofgvghgvba pvcure gung ercynprf n yrggre jvgu gur yrggre KVVV yrggref nsgre vg va gur nycunorg. EBG KVVV vf na rknzcyr bs gur Pnrfne pvcure, qrirybcrq va napvrag Ebzr. Synt vf SYNTFjmtkOWFNZdjkkNH. Vafreg na haqrefpber vzzrqvngryl nsgre SYNT."

answer = codecs.decode(cipher, "rot13")
print(answer)


flagを入力したら通りました!



使ったものなど

解答に使ったものや、調べているうちに知ったこと。

ROT13 - Wikipedia …まさにこの暗号。
シーザー暗号 - Wikipedia …ROT13の仲間。
単一換字式暗号 - Wikipedia …ROT13などは、この暗号形式の一種。