βœ’οΈ Cryptography/Dreamhack

[Dreamhack] Basic_Crypto1 λ“œλ¦Όν•΅ μ›Œκ²Œμž„ 문제 풀이

A Lim Han 2023. 8. 16. 18:55

❀️ Basic_Crypto1 λ“œλ¦Όν•΅ μ›Œκ²Œμž„ 문제 풀이

1.  λ¬Έμ œμ— λŒ€ν•œ μ„€λͺ…을 읽은 ν›„ 문제 파일 λ‹€μš΄λ‘œλ“œ

 

++ Roman Emperor's Cipher (μ‹œμ € μ•”ν˜Έλž€?)

μ‹œμ € μ•”ν˜Έ(Caesar cipher)λŠ” κ°€μž₯ κ°„λ‹¨ν•œ λŒ€μΉ˜ μ•”ν˜Έ(substitution cipher) 쀑 ν•˜λ‚˜λ‘œ, 둜마의 ν™©μ œ μ‹œμ €κ°€ μ‚¬μš©ν–ˆλ‹€κ³  μ „ν•΄μ§€λŠ” μ•”ν˜Έν™” 방법이닀.

μ‹œμ € μ•”ν˜Έ(Caesar cipher)λŠ” 각 κΈ€μžλ₯Ό μΌμ •ν•œ 거리만큼 λ°€μ–΄μ„œ μ•”ν˜Έν™”ν•˜λŠ” λ°©μ‹μœΌλ‘œ μž‘λ™ν•˜λ©°, μ•”ν˜Έν™” 및 λ³΅ν˜Έν™” 곡식은 μ•„λž˜μ™€ κ°™λ‹€. κ³΅μ‹μ—μ„œ n은 μ•”ν˜Έν‚€λ₯Ό, x λŠ” 평문 μ•ŒνŒŒλ²³μ˜ μœ„μΉ˜(0 ~ 25)λ₯Ό λ‚˜νƒ€λ‚Έλ‹€.

 

μ•”ν˜Έν™” λ³΅ν˜Έν™”
E(x) = (x + n) % 26 D(x) = (x - n + 26) % 26

2.  λ‹€μš΄λ°›μ€ encode.txt 파일 μ˜€ν”ˆ  -->  μ•”ν˜Έν™”λœ FLAG 발견

3.  μ‹œμ € μ•”ν˜Έ 해독을 μœ„ν•œ 슀크립트 μž‘μ„±

def caesar_decrypt(ciphertext, shift):
    decrypted_text = ""  # ν•΄λ…λœ ν…μŠ€νŠΈλ₯Ό μ €μž₯ν•  λ³€μˆ˜ μ΄ˆκΈ°ν™”

    for char in ciphertext:
        if char.isalpha():  # μ•ŒνŒŒλ²³μΈμ§€ 확인
            ascii_offset = ord('A') if char.isupper() else ord('a')  # λŒ€λ¬Έμžμ™€ μ†Œλ¬Έμžμ˜ ASCII μ½”λ“œ μ‹œμž‘κ°’μ„ κ²°μ •
            decrypted_char = chr((ord(char) - ascii_offset - shift) % 26 + ascii_offset)
            # μ•”ν˜Έλ¬Έ 문자의 ASCII μ½”λ“œ κ°’μ—μ„œ μ‹œμž‘κ°’μ„ λΊ€ λ’€, μ‹œμ € μ•”ν˜Έμ˜ ν‚€λ₯Ό λΊ€ 값에 λŒ€ν•œ λͺ¨λ“ˆλ‘œ μ—°μ‚° μˆ˜ν–‰ ν›„ λ‹€μ‹œ μ‹œμž‘κ°’μ„ λ”ν•˜μ—¬ 해독 문자 ꡬ함
            decrypted_text += decrypted_char  # 해독 문자λ₯Ό ν•΄λ…λœ ν…μŠ€νŠΈμ— μΆ”κ°€
        else:
            decrypted_text += char  # μ•ŒνŒŒλ²³μ΄ μ•„λ‹ˆλΌλ©΄ κ·ΈλŒ€λ‘œ μΆ”κ°€ (곡백, 특수문자 λ“±)

    return decrypted_text  # 전체 λ¬Έμž₯을 ν•΄λ…ν•˜μ—¬ λ°˜ν™˜

ciphertext = "EDVLF FUBSWR GUHDPKDFN"  # μ•”ν˜Έλ¬Έ
for shift in range(1, 26):  # λͺ¨λ“  κ°€λŠ₯ν•œ μ•”ν˜Έ 킀에 λŒ€ν•΄ 반볡
    decrypted_message = caesar_decrypt(ciphertext, shift)  # ν•΄λ‹Ή μ•”ν˜Έ ν‚€λ‘œ μ•”ν˜Έλ¬Έ 해독
    print(f"Shift {shift}: {decrypted_message}")  # μ•”ν˜Έ 킀와 ν•΄λ‹Ή ν‚€λ‘œ ν•΄λ…λœ κ²°κ³Ό 좜λ ₯

 

 

++ κ°€λŠ₯ν•œ λͺ¨λ“  μˆ˜μ— λŒ€ν•˜μ—¬ μ•”ν˜Έν‚€λ₯Ό μ„€μ •ν•œ ν›„, 각자 λ³΅ν˜Έν™” 진행

4.  슀크립트 μ‹€ν–‰ ν›„ κ²°κ³Ό 뢄석  -->  FLAG둜 λ³΄μ΄λŠ” κ²°κ³Όκ°’ 발견

5.  FLAG μž…λ ₯ νŽ˜μ΄μ§€λ‘œ μ΄λ™ν•˜μ—¬ κ²°κ³Όκ°’ μž…λ ₯