フルスタックエンジニアへの道

「フルスタックエンジニアになりたい。。。いや、なってやる!」という備忘録

【CpawCTF】Q6.[Crypto] Classical Cipher

今回は「CpawCTF - Main page」の「Level 1 - Q6.[Crypto] Classical Cipher」を解きたいと思います。

ctf.cpaw.site

環境

Q6.[Crypto] Classical Cipher

Q6.[Crypto] Classical Cipherにアクセスすると、このような説明書きと暗号文がありました。

暗号には大きく分けて、古典暗号と現代暗号の2種類があります。特に古典暗号では、古代ローマの軍事的指導者ガイウス・ユリウス・カエサル(英語読みでシーザー)が初めて使ったことから、名称がついたシーザー暗号が有名です。これは3文字分アルファベットをずらすという単一換字式暗号の一つです。次の暗号文は、このシーザー暗号を用いて暗号化しました。暗号文を解読してフラグを手にいれましょう。

暗号文: fsdz{Fdhvdu_flskhu_lv_fodvvlfdo_flskhu}

f:id:ryasshi:20190809204048p:plain

説明にある通り「シーザー暗号」を利用してフラグを暗号文に暗号化しているので、暗号文のアルファベットを「3文字」ずつ戻して復号したいと思います。
シーザー暗号はとても有名なので、ググればいくつも暗号化・復号できるサイトが出てきます。
ですので、今回はあえてPythonでプログラムを書いて解きたいと思います。
下記が私が書いたプログラムです。(汚いコードですがご容赦ください)

strings = "fsdz{Fdhvdu_flskhu_lv_fodvvlfdo_flskhu}"
rot = []

for i in strings:
    c = ord(i) - 3  # 3文字戻すので「-3」
    if i >= "a" and i <= "z":
        rot.append(chr((c - 97) % 26 + 97))
    elif i >="A" and i <= "Z":
        rot.append(chr((c - 65) % 26 + 65))
    else:
        rot.append(i)

print("".join(rot))

これで、復号できるはずです!
復号したフラグを入力してSubmitします。

f:id:ryasshi:20190809205609p:plainf:id:ryasshi:20190809205717p:plain

できました!


参考:
https://ctf.cpaw.site/index.php
https://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%BC%E3%82%B6%E3%83%BC%E6%9A%97%E5%8F%B7