CTF/암호학

[angstromCTF] ranch - 암호학 / Python / 카이사르암호

SecurityMan 2023. 5. 23. 11:00

 

이번 CTF 에서 

 

암호학 1번으로 나온 문제이다.

 

문제 설명에서 볼 수 있듯이 Caesar 암호를 응용한 문제이다.

 

반응형

 

Caesar는 '카이사르' 라고도 읽힌다.

 

들어본 사람도 있겠지만, 카이사르는 로마의 황제 이름이다.

 

 

카이사르는 동맹군들과 소통해기 위해서 위 그림처럼 알파벳을 몇칸 씩 뒤로 옮겨

 

새로운 글자로 암호문을 만들었는데 이게 바로 카이사르 암호이다.

 

예를들어 Apple 라는 단어가 있다면, 이것을 한칸씩 알파벳을 뒤로 옮겨서

 

Bqqmf 라는 암호를 만드는 것이다.

 

import string

f = open("flag.txt").read()

encrypted = ""

shift = int(open("secret_shift.txt").read().strip())

for i in f:
    if i in string.ascii_lowercase:
        encrypted += chr(((ord(i) - 97 + shift) % 26)+97)
    else:
        encrypted += i

print(encrypted)

 

문제에서는 암호화하는 코드가 주어진다.

 

flag.txt 로부터 f 를 입력받고,

 

secret_shift.txt 로부터 shift 를 입력받아

 

f 의 내용을 shift 만큼 옮기는데

 

그 결과값이 문제에 나온

 

rtkw{cf0bj_czbv_nv'cc_y4mv_kf_kip_re0kyvi_uivjj1ex_5vw89s3r44901831}

 

이 값과 똑같아야 한다.

 

shift 가 어떤 숫자인지 알면

 

바로 그만큼 돌리면 되겠지만

 

문제는 그걸 모른다는것이다.

 

import string

f = "rtkw{cf0bj_czbv_nv'cc_y4mv_kf_kip_re0kyvi_uivjj1ex_5vw89s3r44901831}"

decrypted = ""

for n in range(46):
    decrypted = ""
    for i in f:
        if i in string.ascii_lowercase:
            decrypted += chr(((ord(i) - 97 + n) % 26)+97)
        else:
            decrypted += i

    print(decrypted)

 

모르겠으면 그냥 모든 경우의 수를 다 해보면 된다.

 

카이사르 암호 해봤자 경우의 수가 알파벳으로 한정되기 때문에

 

그냥 돌려보면 된다.

 

코드를 위와 같이 바꿔서 실행시켜보면

 

 

실행결과 중 하나에서

 

올바른 플래그를 찾을 수 있다.

반응형