TL;DR

  • Base64는 8비트 이진 데이터를 64개의 안전한 ASCII 인쇄 가능 문자로 변환하는 인코딩 방식이다.
  • 3바이트(24비트)를 6비트씩 쪼개어 4개의 문자로 매핑하며, 원본 대비 데이터 크기가 약 33% 증가한다.
  • 바이너리 데이터를 SMTP 같은 텍스트 중심 채널이나, JSON/HTML/URL처럼 텍스트 표현이 필요한 컨텍스트에서 안전하게 다루기 위해 사용된다.

Base64 인코딩

Base64는 8비트 이진 데이터(Binary Data)를 문자 코드 영향이 없는 ASCII 영역의 안전한 문자들(A-Z, a-z, 0-9, +, /)로만 이루어진 문자열로 변환하는 Binary-to-Text 인코딩 규격이다. 데이터 전송 시 제어 문자에 의한 전송 중단이나 데이터 변조를 방지하는 것이 핵심 목적이다.


1. 변환 메커니즘 (Encoding Process)

Base64 인코딩은 24비트(3바이트) 단위를 한 블록으로 처리한다.

  1. 입력: 원본 데이터를 3바이트씩 묶는다.
  2. 분할: 24비트 데이터를 6비트씩 4개의 그룹으로 나눈다 ().
  3. 매핑: 각 6비트 값을 10진수로 환산하여 Base64 색인표(Index Table)의 문자로 치환한다.
  4. 패딩 (Padding): 입력 데이터가 3바이트의 배수가 아닐 경우, 부족한 자리를 = 기호로 채워 4글자 단위를 강제한다.

예시: “Man” 인코딩 과정

단계데이터 1 (‘M’)데이터 2 (‘a’)데이터 3 (‘n’)
ASCII / 코드 포인트77 (0x4D)97 (0x61)110 (0x6E)
8비트 이진수010011010110000101101110
24비트 스트림010011010110000101101110
6비트 분할010011010110000101101110
10진수 환산1922546
Base64 문자TWFu

2. 패딩 (Padding) 규칙

입력 데이터의 끝이 24비트 블록(3바이트)으로 나누어떨어지지 않을 때, 마지막 4글자 묶음을 완성하기 위해 패딩 기호인 =를 사용한다.

  • 1바이트 남음 (예: “A”): 부족한 4비트를 0으로 패딩하여 2개 문자를 생성하고, 나머지 두 자리는 패딩 기호 ==를 추가하여 4글자를 완성한다. 결과: QQ==
  • 2바이트 남음 (예: “BC”): 부족한 2비트를 0으로 패딩하여 3개 문자를 생성하고, 마지막 한 자리는 패딩 기호 =를 추가하여 4글자를 완성한다. 결과: QkM=

3. 기술적 배경 (Technical Rationale)

왜 64개() 문자인가?

표준 ASCII(128자) 중 제어 문자(0~31, 127)와 일부 특수문자는 시스템에 따라 다르게 해석되거나 전송 중 유실될 위험이 있다. Base64는 시스템 독립적으로 신뢰성(Reliability) 있게 처리될 수 있는 64개의 문자만을 사용하여 호환성을 극대화했다.

URL-Safe Base64 (base64url)

표준 Base64의 +/는 URL에서 예약어(Query string 등)로 사용되어 문제가 발생한다. 이를 위해 +-, /_로 치환하고 패딩 기호인 =를 생략하거나 퍼센트 인코딩하는 base64url(RFC 4648 §5) 변형이 사용된다.


Connections