OPEN HYPER STEP
← 목록으로 (화이트햇 보안)
SECURITY · 57 / 84
security
CHAPTER 57 / 84
읽기 약 2
FUNCTION

바이트와 인코딩: 보안의 언어


핵심 개념

바이너리 데이터, 16진수, Base64 — 보안에서 매일 마주치는 데이터 형식을 다룬다.

본문

bytes vs str

Python 3에서 bytesstr은 다른 타입입니다.

PYTHON📋 코드 (14줄)
# ⚠️ 이 코드는 허가된 환경에서만 사용하세요.

# 문자열 → bytes
text = "Hello, 보안!"
data = text.encode('utf-8')  # b'Hello, \xeb\xb3\xb4\xec\x95\x88!'

# bytes → 문자열
back = data.decode('utf-8')  # 'Hello, 보안!'

# 잘못된 인코딩 처리
try:
    bad = data.decode('ascii')  # UnicodeDecodeError
except UnicodeDecodeError as e:
    print(f'디코딩 실패: {e}')

16진수와 Base64

보안 분석에서 매일 보는 형식.

PYTHON📋 코드 (15줄)
import base64
import binascii

raw = b'Hello, World!'

# 16진수
hex_str = raw.hex()                # '48656c6c6f2c20576f726c6421'
back = bytes.fromhex(hex_str)      # b'Hello, World!'

# Base64 (HTTP Authorization, JWT, 인증서에서 사용)
b64 = base64.b64encode(raw)        # b'SGVsbG8sIFdvcmxkIQ=='
decoded = base64.b64decode(b64)    # b'Hello, World!'

# URL 안전 Base64 (JWT는 이걸 사용)
url_b64 = base64.urlsafe_b64encode(raw)

URL 인코딩

PYTHON📋 코드 (5줄)
from urllib.parse import quote, unquote

payload = "<script>alert('XSS')</script>"
encoded = quote(payload)           # %3Cscript%3Ealert(%27XSS%27)%3C/script%3E
decoded = unquote(encoded)

해시 — 무결성 검증의 핵심

PYTHON📋 코드 (16줄)
import hashlib

def file_hash(path: str, algo: str = 'sha256') -> str:
    """파일의 해시값을 계산해 무결성 검증에 사용."""
    h = hashlib.new(algo)
    with open(path, 'rb') as f:
        for chunk in iter(lambda: f.read(8192), b''):
            h.update(chunk)
    return h.hexdigest()

# 짧은 텍스트 해시
text = b'password123'
md5 = hashlib.md5(text).hexdigest()      # 482c811da5d5b4bc6d497ffa98491e38 — 깨진 알고리즘, 절대 비밀번호 저장 금지
sha256 = hashlib.sha256(text).hexdigest()  # ef92b778bafe771e89245b89ecbc08a44a4e166c06659911881f383d4473e94f

# 비밀번호 해싱은 반드시 bcrypt/argon2 사용 (다음 트랙에서 다룸)

⚠️ 보안 주의

  • md5·sha1무결성 검증 외 용도 금지 (충돌 공격 존재)
  • 비밀번호 저장: bcrypt, argon2id, scrypt만 사용
  • 해시는 단방향이지만 — 짧은 입력은 무지개표(rainbow table)로 역산 가능

AI 프롬프트
🤖 AI에게 잘 물어보는 법 — 모델·전략별 프롬프트
Claude

무료: Sonnet 4.6 / Pro $20/mo: Opus 4.6

이 Python 코드의 인코딩 처리에서
bytes/str 변환 실수와 보안상 위험한 부분을 찾고
안전한 코드로 수정해줘.
ChatGPT

무료: GPT-5.5 / Plus $20/mo: GPT-5.5 Pro

보안에서 자주 쓰는 인코딩
(hex/base64/url-encode/JWT-encode)의 실전 예시를
각각 한 줄 코드로 보여줘.
Gemini

무료: 2.5 Flash / Pro $19.99/mo: 3.1 Pro

내 프로젝트의 모든 해시 함수 사용 코드를
전체 분석해서 약한 알고리즘(md5/sha1) 사용 여부와
권장 알고리즘으로 마이그레이션 계획을 정리해줘.
Grok

무료: Grok 4.1 / SuperGrok $30/mo

2026년에도 비밀번호 해싱은 bcrypt가 표준인지,
argon2id로 마이그레이션해야 하는지
실무 현황을 솔직히 알려줘.

⭐ 이것만 기억하세요
바이트와 인코딩: 보안의 언어 이 3가지만 확실히 잡으세요
1.bytes와 str의 구분, hex/base64 인코딩은 보안 분석에서 매일 마주치는 기본 도구다
2.hashlib로 파일·문자열 무결성을 검증할 수 있지만 md5/sha1은 비밀번호에 절대 쓰지 말아야 한다
3.다음 챕터에서 정규표현식으로 로그·소스코드에서 패턴을 사냥한다


공유하기
진행도 57 / 84