cv.cm

지식 · 텍스트, 데이터, 보안

Base64 인코딩이란 무엇인가요?

5분 분량

핵심 답변

Base64는 출력 가능한 문자 64개(A–Z, a–z, 0–9, +, /)와 패딩용 =만으로 바이너리 데이터를 표현하는 방식입니다. 3바이트마다 6비트 묶음 네 개로 나누고 각 묶음을 문자 하나에 대응시키므로 "Man"은 "TWFu"가 됩니다. 이메일, JSON, URL처럼 텍스트만 다루는 경로에서 바이너리 데이터를 안전하게 보낼 수 있지만 크기는 약 33% 커집니다. Base64는 인코딩이지 암호화가 아닙니다.

Base64 열기

Base64 동작 원리, 단계별로 보기

Base64는 RFC 4648에 정의되어 있습니다. 64 = 2⁶이므로 출력 문자 하나는 정확히 6비트를 담고, 3바이트(24비트)는 문자 4개에 딱 맞게 대응됩니다.

단계Man
ASCII 코드7797110
2진수(각 8비트)010011010110000101101110
  1. 24비트를 이어 붙입니다: 010011010110000101101110.
  2. 6비트씩 네 묶음으로 나눕니다: 010011 010110 000101 101110.
  3. 숫자로 바꿉니다: 19, 22, 5, 46.
  4. 각 숫자를 문자표에서 찾습니다(0 = A, 25 = Z, 26 = a, 51 = z, 52 = 0, 61 = 9, 62 = +, 63 = /): T, W, F, u.
  5. 결과: TWFu.

= 패딩

입력 길이가 3의 배수가 아니면 마지막 묶음을 0비트로 채우고 =로 부족한 바이트를 표시하므로, 출력 길이는 항상 4의 배수가 됩니다.

입력바이트 수Base64
M1TQ==
Ma2TWE=
Man3TWFu
Hello5SGVsbG8=
é (UTF-8 바이트 C3 A9)2w6k=

n바이트를 인코딩한 길이는 4 × ceil(n ÷ 3)글자입니다. 1 MB 파일은 약 1.33 MB의 텍스트가 되고, MIME 이메일은 76글자마다 줄바꿈을 넣으므로 오버헤드가 조금 더 늘어납니다.

Base64가 쓰이는 곳

  • 이메일 첨부 파일: 초기 메일 시스템은 7비트 텍스트만 전송했기 때문에 MIME은 파일을 Base64로 인코딩합니다.
  • 데이터 URL: HTML이나 CSS에 직접 넣는 작은 이미지로, data:image/png;base64,iVBORw0KGgo... 형태로 씁니다.
  • 이미지, 키, 인증서 같은 바이너리 데이터를 실어 보내야 하는 JSON·XML API.
  • JSON Web Token(JWT): 헤더와 페이로드가 Base64url로 인코딩된 JSON입니다.
  • TLS 인증서와 키를 담는 PEM 파일: -----BEGIN CERTIFICATE----- 줄 사이에 Base64를 넣습니다.
  • HTTP Basic 인증: username:password를 Base64로 인코딩해 보냅니다.

이미지를 데이터 URL로 넣으면 네트워크 요청은 하나 줄지만 크기가 33% 늘고 따로 캐시할 수 없으므로, 보통 아주 작은 이미지에만 쓸 만합니다.

Base64와 Base64url, 그리고 다른 인코딩

표준 Base64는 URL과 파일 이름에서 특별한 의미를 갖는 +와 /를 씁니다. 같은 RFC에 정의된 URL 안전 변형은 이를 -와 _로 바꾸고 = 패딩을 생략하는 경우가 많습니다.

인코딩사용 문자크기 오버헤드사용 예
Base16 (hex)0–9, A–F100%해시, 색상 코드
Base32A–Z, 2–760%2단계 인증 비밀 키
Base64A–Z, a–z, 0–9, +, /33%이메일, 데이터 URL, PEM
Base64urlA–Z, a–z, 0–9, -, _33%JWT, URL 매개변수

흔한 실수

  • 텍스트는 먼저 바이트로 변환해야 하며, 보통 UTF-8을 씁니다. JavaScript의 btoa()는 문자열을 먼저 UTF-8로 인코딩하지 않으면 이모지나 한글처럼 Latin-1 범위를 벗어난 문자에서 오류를 냅니다.
  • 표준 문자표와 URL 안전 문자표를 섞으면 디코딩 오류가 납니다. 표준 디코더를 쓰기 전에 -와 _를 +와 /로 바꾸세요.
  • 패딩이 빠지면 엄격한 디코더는 실패할 수 있습니다. 길이가 4의 배수가 될 때까지 =를 붙이세요.
  • 일부 디코더는 이메일 방식 인코딩의 줄바꿈을 제거해야 문자열을 받아들입니다.

자주 묻는 질문

Base64로 인코딩하면 왜 데이터가 커지나요?

3바이트가 4글자가 되고 각 글자가 1바이트로 저장되므로 출력이 입력보다 약 33% 커집니다.

Base64는 안전한가요?

아니요. 아무것도 숨기지 않으며 디코딩에 키가 필요 없습니다. 데이터를 보호하려면 AES 같은 실제 암호화를 쓰고, Base64는 그 결과를 텍스트로 전달할 때만 쓰세요.

Base64 끝의 =는 무슨 뜻인가요?

패딩입니다. = 하나는 마지막 묶음이 2바이트였다는 뜻이고, ==는 1바이트뿐이었다는 뜻입니다.

Base64 문자열은 어떻게 알아보나요?

영문자, 숫자, +와 /(또는 -와 _)만 들어 있고, 길이가 보통 4의 배수이며, = 하나나 둘로 끝나기도 합니다. eyJ로 시작하는 문자열은 Base64로 인코딩된 JSON인 경우가 많은데, {"로 시작하는 JSON 텍스트를 인코딩하면 eyJ로 시작하기 때문입니다.

전체 지식 문서