かなで技術日誌

プログラミングやエンジニアリング周りについて

主なアウトプットはScrapboxObsidianにまとめてます。

ksnctf-Easy Cipher

最近の勉強はネットワーク、OS、セキュリティなどをやっており、そういった知識の確認と単純に面白そうということからCTFに興味があります。

最近SECCONのオンライン予選があり事前情報無でソロ参加しましたが簡単なcryptoの問題以外は解けなかったので過去問とか常設CTFをやっていきたいと思ったので記録として。

CTFの入門(?)としては定番らしいksnctfというサイトの問題をやっていきたいと思います。
ksnctf.sweetduet.info

以下解法を載せているので注意してください。

今回解いた問題はこちら
ksnctf.sweetduet.info


内容はただの暗号化されているぽい文章があるだけです。













[解法]

とりあえず簡単な暗号と聞いてパッと思いつくのがシーザー暗号です。
ja.wikipedia.org
換字式暗号ですが、アルゴリズムとしてはいたってシンプルなのでまずこれかなと思いました。

とりあえずrotでdecryptできるそれっぽいサイトがあったと思うので探してencryptしたらそれっぽい文章になったので、文章通りに入力したら正解。
www.xarg.org

ただこれだけではあれなので、自分でrotをdecryptするscriptをPythonで書いて、改めて合ってるか確認しました。
なおPythonにはrotのライブラリがありますが、あくまで自分で実装してみます。

line = input()
for i in range(25):
    print('rot{}'.format(i + 1))
    result = ''
    for j in range(len(line)):
        # アスキーコードに変換
        code = ord(line[j])
        # A-Z
        if 65 <= code <= 90:
            code = code + i + 1
            if code > 90:
                code = code - 26
        # a-z
        elif 97 <= code <= 122:
            code = code + i + 1
            if code > 122:
                code = code - 26
        result += chr(code)
    print(result)

a-zとA-Zでrot1〜rot26を一発でコマンド上に表示します。

こんな感じで自分でCTF用のライブラリを用意すると便利そう