`base64.b64encode().decode()`를 사용하는 이유

agnusdei·2일 전

base64.b64encode().decode()를 사용하는 이유

Python의 base64.b64encode() 결과값은 str이 아닌 bytes 타입입니다.

따라서 이 값을 f-string이나 일반 문자열(str)에 바로 삽입하면 접두사 b'...'까지 함께 들어가 페이로드가 오염되므로, 마지막에 .decode()를 통해 순수 텍스트(str)로 변환해 주어야 합니다.


.decode() 유무에 따른 차이

import base64

php_code = "<?php echo 'hello'; ?>"

# 1. decode() 미사용 (bytes 타입)
encoded_bytes = base64.b64encode(php_code.encode())
payload1 = f"base64_decode('{encoded_bytes}')"
# 결과: "base64_decode('b\'PD9waHAgZWNobyA...=\'')" -> b'...' 접두사로 인한 구문 오류 발생

# 2. decode() 사용 (str 타입)
encoded_str = base64.b64encode(php_code.encode()).decode()
payload2 = f"base64_decode('{encoded_str}')"
# 결과: "base64_decode('PD9waHAgZWNobyA...=')" -> 정상적인 Base64 텍스트만 삽입

흐름 요약

  1. php_code.encode()
    str →\rightarrow bytes (b64encode 함수가 바이트 입력만 받기 때문)
  2. base64.b64encode(...)
    bytes →\rightarrow Base64 bytes (결과가 b'...' 형태의 바이트로 반환)
  3. .decode()
    Base64 bytes →\rightarrow Base64 str (f-string 조합 시 b'...' 접두사를 제거하고 순수 텍스트만 추출하기 위함)

0개의 댓글