본문 바로가기

SWUFORCE 워게임👊🏻

[CryptoHack] Base64 ; crypto

<워게임_CryptoHack_crypto_Base64>

 

또 다른 일반적인 인코딩 체계는 64자의 알파벳을 사용하여 이진 데이터를 ASCII 문자열로 표현할 수 있는 Base64입니다. Base64 문자열의 한 문자는 6개의 이진 숫자(비트)를 인코딩하므로 Base64의 4개 문자는 8비트 바이트 3개를 인코딩합니다. Base64는 온라인에서 가장 많이 사용되므로 이미지와 같은 이진 데이터를 HTML 또는 CSS 파일에 쉽게 포함할 수 있습니다.

아래 육각 문자열을 가져와 바이트로 해독한 다음 Base64로 인코딩합니다.

72bca9b68fc16ac7beeb8f849dca1d8a783e8acf9679bf9269f7bf

hint! Python에서는 base64 가져오기와 함께 base64 모듈을 가져온 후 base64.b64encode() 함수를 사용할 수 있습니다. 챌린지 설명에 명시된 대로 헥스를 먼저 디코딩하는 것을 잊지 마세요.

 

 

1. Base64란?

바이너리 데이터를 문자 코드에 영향을 받지 않는 공통 ASCII 문자로 표현하기 위해 만들어진 인코딩. ASCII 문자 하나가 64진법의 숫자 하나를 의미하기 때문에 BASE64라는 이름을 가짐.
8비트짜리 바이트 3개를 6비트씩 4개로 쪼개어 Base64 코드 4개로 바꾸어 표현한다. Base64 코드를 바이너리로 디코딩하기 편하게 하기 위해 Base64 코드를 무조건 4글자 단위로 만들고, 빈 부분을 '=' 문자로 채워두기도 함.

 

2. 주어진 헥사 문자열을 바이트로 디코딩하고, Base64로 인코딩해야 할 듯. Python의 base64 모듈과 binascii 모듈을 사용했다. base64.b64encode() 함수도 사용!!

import base64
import binascii

# 주어진 헥사 문자열
hex_string = "72bca9b68fc16ac7beeb8f849dca1d8a783e8acf9679bf9269f7bf"

# 헥사 문자열을 바이트로 디코딩
byte_data = binascii.unhexlify(hex_string)

# 바이트 데이터를 Base64로 인코딩
base64_encoded = base64.b64encode(byte_data)

# 결과 출력
print(base64_encoded.decode())  # Base64 문자열 출력

 

3. flag 얻음! 해결 완👊🏻