0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PicoCTF 2021 Mod26

Posted at

Mod 26

tags: PicoCTF Cryptography 2021

問題

暗号は簡単です。ROT13を知っていますか?

Cryptography can be easy, do you know what ROT13 is?

問題サイト:PicoCTF
配布された文字列:cvpbPGS{arkg_gvzr_V'yy_gel_2_ebhaqf_bs_ebg13_jdJBFOXJ}

ROT13とは

以下のような特徴がある。

  • シーザー暗号、単換字式暗号と呼ばれるものの一種で、アルファベットを後ろに13文字分ずらす処理。(ex. a → n, b → o)
  • アルファベットのみが対象であるため数字や記号は変化しない。
  • 変換前と変換後は大文字小文字が変わらない。(ex. a → n, A → N)
  • アルファベットは26種類存在しているため2回ROT13の処理を行うと元の文に戻る。(26文字分ずらしたことになり丁度一周している)

解法

サイトでROT13について検索をかけると暗号化や解読ができるサイトが複数あった。それらを利用してもよいがせっかくなので自力でプログラムを組んで復号していく。

ROT13を復号するには、まずアルファベットであるか、真ならそれが大文字か小文字かを判別したあと、その文字のASCIIコードに13を足すことで元に戻すことを1文字ずつやればよい。

solve.py
import string

flag = "cvpbPGS{arkg_gvzr_V'yy_gel_2_ebhaqf_bs_ebg13_jdJBFOXJ}"
print(flag)

#文字列を1文字づつ分割してリスト化
flag = list(flag)

for i in range(len(flag)):

    #要素がアルファベットか否かを判別
    if flag[i] in string.ascii_letters:

        #大文字の場合
        if ord(flag[i]) < 97:
            base = 65

        #小文字の場合
        else:
            base = 97

        #13文字ずらす
        num = (ord(flag[i]) - base + 13)%26
        flag[i] = chr(num + base)

flag = ''.join(flag)
print(flag)

解答

$ python3 solve.py
cvpbPGS{arkg_gvzr_V'yy_gel_2_ebhaqf_bs_ebg13_jdJBFOXJ}
picoCTF{next_time_I'll_try_2_rounds_of_rot13_wqWOSBKW}

復元成功
picoCTF{next_time_I'll_try_2_rounds_of_rot13_wqWOSBKW}

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?