CalKit
IT/개발

개발자를 위한 인코딩과 해시 완벽 가이드

Base64, URL 인코딩, UTF-8부터 MD5, SHA-256까지 — 개발에서 자주 쓰이는 인코딩과 해시 함수의 원리와 활용법을 정리했습니다.

인코딩과 해시, 왜 알아야 할까?

웹 개발, API 연동, 보안 구현 등 개발 업무에서 인코딩과 해시는 매일 마주치는 개념입니다. 인코딩은 데이터를 다른 형식으로 변환하는 것이고, 해시는 데이터를 고정 길이의 값으로 변환하는 것입니다. 둘 다 "변환"이지만 목적과 특성이 전혀 다릅니다.

인코딩 vs 해시 비교

구분인코딩해시
목적데이터 호환성, 전송무결성 검증, 보안
복원 가능가능 (디코딩)불가능 (단방향)
키 필요불필요불필요 (HMAC 제외)
출력 길이입력에 비례항상 고정
예시Base64, URL 인코딩MD5, SHA-256

Base64 인코딩

바이너리 데이터를 ASCII 문자(A-Z, a-z, 0-9, +, /)로 변환합니다. 이메일 첨부파일, 이미지 Data URL, JWT 토큰 등에 사용됩니다.

원본: Hello, World!

Base64: SGVsbG8sIFdvcmxkIQ==

  • 원본 대비 약 33% 크기 증가 (3바이트 → 4문자)
  • 패딩 문자(=)로 길이를 4의 배수로 맞춤
  • 주의: 암호화가 아님! 누구나 디코딩 가능
🔐 해시 생성기 MD5, SHA-1, SHA-256 해시 즉시 생성

URL 인코딩 (Percent Encoding)

URL에서 사용할 수 없는 문자를 %XX 형식으로 변환합니다.

원본: 안녕하세요

URL 인코딩: %EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94

공백: Hello World → Hello%20World

특수문자: a&b=c → a%26b%3Dc

API 호출 시 쿼리 파라미터에 한글이나 특수문자가 포함되면 반드시 URL 인코딩해야 합니다.

문자 인코딩: UTF-8의 중요성

전 세계 웹 페이지의 약 98%가 UTF-8을 사용합니다.

인코딩영문 크기한글 크기지원 문자
ASCII1바이트미지원128자
EUC-KR1바이트2바이트한/영/일 일부
UTF-81바이트3바이트전 세계 모든 문자
UTF-162바이트2바이트전 세계 모든 문자

한글 "가"의 UTF-8 바이트는 0xEA 0xB0 0x80 (3바이트)입니다. 데이터베이스, 파일, API 모두 UTF-8로 통일하는 것이 깨짐을 방지합니다.

주요 해시 함수 비교

해시출력 길이속도보안성용도
MD5128비트(32자)매우 빠름취약 ❌체크섬(파일 검증)
SHA-1160비트(40자)빠름취약 ❌레거시, Git
SHA-256256비트(64자)보통안전 ✅디지털 서명, 블록체인
SHA-512512비트(128자)보통안전 ✅고보안 요구
bcrypt184비트느림(의도적)안전 ✅비밀번호 저장

비밀번호 저장에는 bcrypt, scrypt, Argon2를 사용하세요. MD5/SHA는 속도가 빨라 무차별 대입 공격에 취약합니다.

📋 JSON 포맷터 JSON 정리, 검증, 변환 도구

실무 활용 팁

  • JWT 토큰: Header.Payload.Signature 구조에서 각 부분이 Base64Url 인코딩됩니다.
  • 파일 무결성: 다운로드한 파일의 SHA-256 체크섬을 공식 사이트와 비교하세요.
  • API 키: 절대 해시 대신 원본을 전송하지 마세요. HMAC-SHA256으로 서명하세요.
  • 데이터베이스: CHAR SET을 utf8mb4로 설정해야 이모지도 저장할 수 있습니다.
  • Git: 커밋 ID는 SHA-1 해시입니다. Git은 SHA-256으로 전환 중입니다.

💬자주 묻는 질문

🧮관련 계산기

관련 블로그 글

인기 계산기