이번 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)
모르겠으면 그냥 모든 경우의 수를 다 해보면 된다.
카이사르 암호 해봤자 경우의 수가 알파벳으로 한정되기 때문에
그냥 돌려보면 된다.
코드를 위와 같이 바꿔서 실행시켜보면
실행결과 중 하나에서
올바른 플래그를 찾을 수 있다.
반응형
'CTF > 암호학' 카테고리의 다른 글
[TMUCTF] Prison - 암호학 / Tap code (99) | 2023.07.04 |
---|---|
[angstromCTF] impossible - 암호학 / Python (91) | 2023.05.24 |
[Space Heroes CTF] Rick Sanchez Algorithm - 암호학 / RsaCtfTool (89) | 2023.05.09 |
[Tenable CTF] Quit messing with my flags - 암호학 / MD5 (62) | 2023.03.20 |
[Tenable CTF] Not JSON - 암호학 / Base64 / Python (46) | 2023.03.16 |