π SingleByteXor λλ¦Όν΅ μκ²μ λ¬Έμ νμ΄
1. λ¬Έμ μ λν μ€λͺ μμ§ (λ¬Έμ νμΌμ λ³λ λ€μ΄λ‘λ νμ X)


++ XOR(Exclusive OR) μνΈλ?

XOR(Exclusive OR) μνΈλ²μ λ λΉνΈλ λΆ(Boolean) κ°μ΄ λ€λ₯Ό λ 1, κ°μ λ 0μ λ°ννλ "λ°°νμ λ Όλ¦¬ν©" μ°μ°μ μ¬μ©νμ¬ λ°μ΄ν°λ₯Ό μνΈννλ κ°λ¨ν μνΈν κΈ°λ²μ΄λ€.
XOR(Exclusive OR) μ°μ°μ κ° λ°μ΄ν° λΉνΈμ μνΈν ν€ λΉνΈ κ° μ°μ°μ μννλ λ°©μμΌλ‘ λμνλ©°, κ° λΉνΈμ λν΄ μνΈν ν€μ ν΄λΉ λΉνΈμ XOR μ°μ°μ μννλ©΄ μνΈλ¬Έμ΄ μμ±λλ€.
볡νΈνμ κ²½μ° λμΌν ν€λ₯Ό ν΅ν΄ μ°μ°μ μΆκ° μνν¨μΌλ‘μ¨ μ»μ μ μλ€.

2. 볡νΈνλ₯Ό μν Python μ€ν¬λ¦½νΈ μμ±
hex_value = "54586b6458754f7b215c7c75424f21634f744275517d6d"
decoded_hex = bytes.fromhex(hex_value)
possible_messages = []
for key in range(256):
decoded_message = bytes([byte ^ key for byte in decoded_hex])
possible_messages.append(decoded_message)
for message in possible_messages:
print(message.decode("utf-8", errors="ignore"))

++ κ°λ₯ν λͺ¨λ λ¨μΌ λ°μ΄νΈ κ°(0x00λΆν° 0xFF)μ λν΄ XOR μ°μ°μ μννμ¬ νλ¬Έ νμ
β hex_value λ³μμ μνΈνλ ν₯μ€κ°μ΄ ν λΉ
β‘ bytes.fromhex() ν¨μλ₯Ό μ¬μ©νμ¬ μνΈνλ ν₯μ€κ°μ λ°μ΄νΈλ‘ λ³ν
β’ λ³νν κ°μ decoded_hex λ³μμ μ μ₯
β£ 0λΆν° 255κΉμ§μ λͺ¨λ κ°μ λ°λ³΅νλ©° XOR μνΈνλ κ°μ ν΄λΉ κ°μΌλ‘ 볡νΈν
†볡νΈνν κ°μ decoded_message λ³μμ μ μ₯
β₯ possible_messages 리μ€νΈμ λͺ¨λ 볡νΈν λ©μμ§ μΆκ°
β¦ possible_messages 리μ€νΈμ λͺ¨λ λ©μμ§μ λν΄ UTF-8 νμμΌλ‘ λμ½λ©νμ¬ μΆλ ₯

3. μμ±ν Python μ€ν¬λ¦½νΈ μ€ν --> 15λ²μ§Έ μ€μμ FLAG λ°κ²¬



4. λ€μ λ¬Έμ νμ΄μ§λ‘ λμμ λ°κ²¬ν FLAG μ λ ₯


'βοΈ Cryptography > Dreamhack' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Dreamhack] Basic_Crypto1 λλ¦Όν΅ μκ²μ λ¬Έμ νμ΄ (0) | 2023.08.16 |
---|