CTF 풀이

[드림핵] Basic_Crypto1

화이트해커 Luna 🌙 2023. 5. 28. 15:13
728x90
반응형

Basic_Crypto1

 

이 문제는 로마 황제 암호(Roman emperor’s cipher)를 해독하는 문제입니다. 주어진 암호문 "EDVLF FUBSWR GUHDPKDFN"을 해독하여 "DH{decode_Text}"로 변환해야 합니다. 암호문은 알파벳 대문자와 공백으로 이루어져 있으며, 해독 과정에서 알파벳 대문자를 그대로 사용하고 공백은 "_"로 대체합니다.


 

로마 황제 암호(Roman emperor’s cipher)

 

로마 황제 암호는 알파벳을 암호화하는 간단한 치환 암호입니다.

 

각 알파벳을 암호화하기 위해 알파벳의 아스키 코드 값을 사용하며, 암호화에는 아스키 코드 값에서 3을 뺀 후 알파벳으로 변환하는 방식을 사용합니다.

 

이때, 알파벳이 A보다 작은 경우, 즉 아스키 코드 값이 65 미만인 경우에는 알파벳을 Z로부터 거꾸로 세어나가야 합니다.

 

즉, 아스키 코드 값에서 3을 뺀 값이 65 미만이라면 26을 더하여 원래 알파벳의 아스키 코드 값을 구합니다.

 

주어진 문제에서는 암호화된 텍스트를 파일로부터 읽어와 로마 황제 암호를 해독하여 포맷에 맞춰 출력해야 합니다.

 

코드에서는 decode_cipher 함수를 정의하여 암호를 해독하고, encode.txt 파일로부터 암호문을 읽어와 해독된 결과를 출력합니다.

 

아래는 문제를 해결하는 코드입니다.

 

#!/usr/bin/env python3
def decrypt_cipher(ciphertext):
    words = ciphertext.split()  # 암호문을 공백을 기준으로 분리하여 단어 리스트로 만듭니다.
    decrypted_words = []
    
    for word in words:
        decrypted_word = ""
        for char in word:
            ascii_code = ord(char)  # 알파벳의 아스키 코드 값을 가져옵니다.
            decrypted_ascii = ascii_code - 3  # 아스키 코드 값에서 3을 뺍니다.
            
            if decrypted_ascii < 65:  # 아스키 코드 값이 65 미만인 경우
                decrypted_ascii += 26  # 26을 더하여 원래 알파벳의 아스키 코드 값을 구합니다.
            
            decrypted_char = chr(decrypted_ascii)  # 아스키 코드 값을 문자로 변환하여 해독된 알파벳을 얻습니다.
            decrypted_word += decrypted_char
        
        decrypted_words.append(decrypted_word)
    
    decrypted_text = " ".join(decrypted_words)  # 해독된 단어를 공백으로 연결하여 해독된 문장을 만듭니다.
    decrypted_text = decrypted_text.replace(" ", "_")  # 공백을 "_"로 대체합니다.
    
    return decrypted_text

# 암호문을 파일에서 읽어옵니다.
with open("encode.txt", "r") as file:
    ciphertext = file.read()

# 암호 해독 함수를 호출하여 해독된 결과를 얻습니다.
decrypted_text = decrypt_cipher(ciphertext)

# 포맷에 맞춰 해독된 결과를 출력합니다.
output = "DH{" + decrypted_text + "} "
print(output)

 

코드를 실행하면 encode.txt 파일로부터 암호문을 읽어와 해독된 결과를 출력합니다.

로마 황제 암호는 간단한 치환 암호이므로 코드에서 사용된 암호 해독 과정은 비교적 간단합니다. 알파벳을 아스키 코드로 변환한 3 값으로 해독하며, 결과를 다시 알파벳으로 변환하여 해독된 텍스트를 얻습니다. 암호문은 공백을 기준으로 단어로 분리되므로, 해독된 단어를 공백으로 연결하여 해독된 문장을 만들고, 공백을 언더스코어(_) 대체하여 출력합니다.

 

 

실행화면 ( flag )

 

 

 


암호 해독은 암호학과 보안에서 흥미로운 주제 중 하나입니다. 이번 포스팅에서는 로마 황제 암호를 해독하는 방법과 그 과정을 다루었습니다. 암호학과 보안에 대한 지식을 활용하여 다양한 문제를 해결할 있도록 노력해 보세요. 감사합니다.

728x90
반응형

'CTF 풀이' 카테고리의 다른 글

[드림핵] r-xor-t 풀이  (2) 2024.02.13
[드림핵] Relative Path Overwrite Advanced 풀이  (1) 2024.02.07
[드림핵] php-1 풀이 (+LFI치트시트)  (1) 2024.02.01
[드림핵] cpp-type-confusion  (0) 2023.05.12