security
CHAPTER 57 / 84
읽기 약 2분
FUNCTION
바이트와 인코딩: 보안의 언어
핵심 개념
바이너리 데이터, 16진수, Base64 — 보안에서 매일 마주치는 데이터 형식을 다룬다.
본문
bytes vs str
Python 3에서 bytes와 str은 다른 타입입니다.
# ⚠️ 이 코드는 허가된 환경에서만 사용하세요.
# 문자열 → 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
보안 분석에서 매일 보는 형식.
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 인코딩
from urllib.parse import quote, unquote
payload = "<script>alert('XSS')</script>"
encoded = quote(payload) # %3Cscript%3Ealert(%27XSS%27)%3C/script%3E
decoded = unquote(encoded)해시 — 무결성 검증의 핵심
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