CTF/암호학

[JISCTF] Upside Down!! - 암호학 / Python

SecurityMan 2023. 1. 15. 11:00

 

암호학 카테고리의 간단한 문제

 

간단한 코딩으로 풀 수 있는 문제이다.

 

반응형

 

별다른 설명 없이

 

암호화된 플래그가 주어진다.

 

fkhrwv_wldm_vmtorhs_xszizxgvih_xibkgltizksb

 

위 내용을 Decrypt 하는것이 문제의 목표인데

 

문제 제목에서 힌트를 얻었다.

 

Upside Down 이니 뭔가 알파벳으로 장난을 쳤을거라고 생각했다.

 

맨 앞에 있는 f 를 예로 들어보면

 

f는 알파벳 순서로 봤을때 6번째에 있으니 (a b c d e f)

 

알파벳을 z부터 a까지 거꾸로 나열했을 때 6번째에 있는 u 로 (z y x w v u) 바꾸면 되지 않을까 하는 생각이 들었다.

 

 

생각한 내용을 코드로 옮길때는

 

ASCII 코드표를 참고했다.

 

위의 표를 보면 소문자 a는 10진수로 97,

 

소문자 z는 10진수로 122로 표현된다.

 

여기서 a를 z로, b를 y로 바꾸게끔 만들려면

 

122 - (해당 알파벳의 10진수 표현 - 97) 로 계산하면 될 것이다.

 

cipher = 'fkhrwv_wldm_vmtorhs_xszizxgvih_xibkgltizksb'
flag = ''

for i in range(len(cipher)):
    flag += chr(122 - (int(ord(cipher[i]))-97))

print(flag)

 

코드로 쓰면 이렇게 된다.

 

cipher 변수에 암호문을 넣어주고

 

암호문의 첫번째 알파벳부터 가져와 

 

수식에 넣어 결과값을 반환하고 출력하는 것이다.

 

 

코드를 실행시키면 플래그를 찾을 수 있다.

반응형