<워게임_CryptoHack_crypto_Bytes.and.Big.Integers>
[문제]

RSA와 같은 암호 시스템은 숫자로 작동하지만 메시지는 문자로 구성됩니다. 수학적 연산을 적용하려면 메시지를 어떻게 숫자로 변환해야 할까요? 가장 일반적인 방법은 메시지의 순서 바이트를 가져와 16진수로 변환한 다음 연결하는 것입니다. 이는 16진수/16진수로 해석할 수 있으며, 10진수/10진수로도 표현할 수 있습니다.
설명하자면:
message: HELLO
ascii bytes: [72, 69, 76, 76, 79]
hex bytes: [0x48, 0x45, 0x4c, 0x4c, 0x4f]
base-16: 0x48454c4c4f
base-10: 310400273487
힌트! Python의 PyCryptom 라이브러리는 바이트_to_long() 및 long_to_bytes() 메서드로 이를 구현합니다. 먼저 PyCryptom을 설치하고 Crypto.Util.number 가져오기 *에서 가져와야 합니다. 자세한 내용은 FAQ를 확인하세요.
다음 정수를 메시지로 다시 변환합니다:
11515195063862318899931685488813747395775516287289682636499965282714637259206269
[풀이]
주어진 정수를 메시지로 변환하려면, 이 숫자를 바이트로 변환한 후 각 바이트를 ASCII 문자로 해석하면 된다. Python의 PyCryptodome 라이브러리에서 제공하는 long_to_bytes() 메서드를 사용하면 이를 쉽게 해결할 수 있다.
pip install pycryptodome
from Crypto.Util.number import long_to_bytes
# 주어진 정수
number = 11515195063862318899931685488813747395775516287289682636499965282714637259206269
# 정수를 바이트로 변환하고, 이를 ASCII 문자열로 디코드
message = long_to_bytes(number).decode()
print("Recovered message:", message)
원래 이 코드로 해결하려 했는데, PyCryptodome 라이브러리 설치에 문제가 생겨서 다른방법으로 풀었다.
수동으로 숫자를 바이트로 변환하고 복원하는 방법이다.!
def long_to_bytes(n):
byte_array = []
while n > 0:
byte_array.append(n & 0xFF) # 가장 하위 바이트를 추출
n >>= 8 # 오른쪽으로 8비트 이동
byte_array.reverse() # 빅 엔디안 순서로 정렬
return bytes(byte_array)
# 주어진 정수
number = 11515195063862318899931685488813747395775516287289682636499965282714637259206269
# 정수를 바이트로 변환하고 디코드
message = long_to_bytes(number).decode()
print("Recovered message:", message)


해결 완! 👊🏻
'SWUFORCE 워게임👊🏻' 카테고리의 다른 글
| [SuNiNaTaS] 15번 ; forensics (1) | 2025.01.14 |
|---|---|
| [Dreamhack] Base64 10 Times ; crypto (0) | 2025.01.14 |
| [Dreamhack] LEVEL1 ; crypto ; STREAMer-Prototype (0) | 2024.11.19 |
| [CryptoHack] Base64 ; crypto (0) | 2024.11.12 |
| [Suninatas] 05 ; web (2) | 2024.11.12 |