Base64란 무엇인가
Base64는 이진 데이터를 순수 텍스트로 인코딩하는 방식입니다. 64개의 인쇄 가능 문자(A-Z, a-z, 0-9, +, /)로 임의의 이진 데이터를 표현하여, 이진 데이터가 텍스트만 지원하는 채널(JSON, XML, URL, 메일)을 통해 전송될 수 있게 합니다.
인코딩 원리
문자표
Base64는 64개의 문자를 사용: 대문자 A-Z(26), 소문자 a-z(26), 숫자 0-9(10), 더하기 +, 슬래시 /, 총 64개. 등호 = 는 끝의 패딩으로 사용됩니다.
인코딩 과정
- 입력 데이터를 3바이트(24비트) 단위로 그룹화
- 24비트를 4그룹으로 분할, 각 그룹 6비트
- 6비트마다 하나의 Base64 문자에 대응(2의 6제곱 = 64, 정확히 64개 문자)
- 3바이트 미만은 = 로 패딩
예시
3바이트 입력(24비트) → 4개의 Base64 문자. 따라서 인코딩 후 바이트 수는 원래의 4/3, 즉 약 133%, 33% 증가합니다.
왜 33% 커지는가
본질적으로 1바이트는 256가지 값(8비트)을 표현할 수 있지만, Base64의 각 문자는 64가지 값(6비트)만 표현합니다. 같은 정보량을 표현하려면 6비트 인코딩이 8비트 인코딩보다 8/6 = 4/3배 더 많은 문자가 필요합니다. 따라서 Base64 인코딩 후 크기는 원래의 4/3이며, 33% 증가합니다.
이것은 Base64의 고유한 비용입니다 — 공간을 희생하여 "텍스트 전송 가능"을 얻습니다.
인코딩 예시
텍스트 "Man"(3바이트 ASCII):
- M = 77 = 01001101
- a = 97 = 01100001
- n = 110 = 01101110
- 24비트로 결합: 01001101 01100001 01101110
- 4그룹 6비트로 분할: 010011 010110 000101 101110
- 대응하는 Base64 문자: T W F u
- 인코딩 결과: TWFu
3바이트가 4바이트로, 정확히 4/3.
Base64 변형
표준 Base64
문자표에 + 와 / 를 포함, 끝에 = 로 패딩. 범용 목적에 적합.
URL 안전 Base64
- 와 / 는 URL에서 특별한 의미를 가지므로, - 와 _ 로 대체. URL 전송에 적합.
Base64URL
URL 안전 변형, JWT(JSON Web Token)에서 자주 사용.
Base64 vs Base32 vs Hex
Base64
- 문자 집합 64개
- 인코딩 후 33% 증가
- 문자에 대소문자 알파벳 숫자와 +/ 포함, 대소문자 구분
Base32
- 문자 집합 32개(A-Z, 2-7)
- 인코딩 후 60% 증가
- 대소문자 구분 없음, 혼동되기 쉬운 문자 회피, 수동 입력에 적합
Hex(16진수)
- 문자 집합 16개(0-9, a-f)
- 인코딩 후 100% 증가(바이트마다 두 문자로)
- 가장 간단하고 호환성 최고, 하지만 크기 두 배
크기: Hex > Base32 > Base64. 작은 것을 원하면 Base64, 호환성과 단순함을 원하면 Hex.
Base64는 암호화인가?
아닙니다. Base64는 인코딩이지 암호화가 아닙니다. 누구나 디코딩할 수 있으며, 키로 보호되지 않습니다. Base64를 암호화로 사용하는 것은 심각한 오해입니다 — 그것은 단지 "난해한 문자열"로 "위장"할 뿐, 디코딩하면 즉시 평문입니다.
민감한 데이터를 암호화하려면 AES 등 암호화 알고리즘을 사용하고, Base64는 전송 인코딩에만 사용하세요.
사용 사례
데이터 전송
이진 데이터를 텍스트 채널(JSON, XML, URL, 메일)로 전송할 때, Base64로 인코딩하여 텍스트로 변환.
소형 이미지 임베드
소형 이미지를 Base64로 인코딩하여 HTML/CSS에 인라인, HTTP 요청 감소(Base64 이미지 활용 참조).
JWT
JSON Web Token은 Base64URL로 header와 payload를 인코딩.
데이터 URI
data URL 프로토콜은 Base64로 리소스를 임베드.
Basic Auth
HTTP Basic 인증은 사용자 이름과 비밀번호를 Base64로 인코딩(암호화가 아님에 주의, HTTPS와 함께 사용해야 함).
DocsAll로 인코딩/디코딩
- 텍스트 또는 Base64 문자열 입력
- 인코딩 또는 디코딩 선택
- 원클릭 변환
- 결과 복사
브라우저에서 처리되어 데이터가 외부로 전송되지 않습니다.
흔한 함정
암호화로 착각
Base64는 암호화가 아닙니다. 민감한 데이터를 Base64만으로 "보호"하지 마세요.
인코딩 후 크기 증가
대용량 파일을 Base64로 인코딩하면 33% 팽창하여 전송 및 저장 비용이 증가합니다. 이진 채널을 사용할 수 있으면 Base64를 사용하지 마세요.
문자 집합 혼동
표준 Base64에는 +/ 가 포함되어 있어, URL에 넣으려면 이스케이프하거나 URL 안전 변형을 사용해야 합니다. 변형을 혼용하면 디코딩 실패.
끝의 = 생략 불가
패딩 문자 = 는 인코딩의 일부이며, 생략하면 디코딩 오류가 발생할 수 있습니다. 일부 구현은 생략을 허용하지만, 표준적이지 않습니다.
요약
Base64는 인코딩이지 암호화가 아니며, 64개 문자로 이진 데이터를 표현하고 크기가 33% 증가하는 것은 고유한 비용입니다. 용도는 이진 데이터를 텍스트 채널로 전송하는 것입니다. URL 환경에서는 URL 안전 변형을 사용하세요. DocsAll 인코딩/디코딩 도구는 브라우저에서 실행되어 데이터가 외부로 전송되지 않습니다.