~ / developer / base64

⇄ Base64 Codec

텍스트와 Base64를 오가는 인코더/디코더. UTF-8(한글·이모지) 안전.

광고
광고
plain.txt
encoded.b64
ready.
광고

사용법

  1. 원문을 왼쪽 plain.txt에 입력하고 Encode →를 누르면 오른쪽 encoded.b64에 Base64 문자열이 나옵니다.
  2. 반대로 오른쪽에 Base64를 붙여넣고 ← Decode를 누르면 왼쪽에 원래 텍스트가 복원됩니다.
  3. URL-safe를 체크한 채 인코딩하면 URL·파일명에 바로 넣을 수 있는 형태로 출력됩니다.
  4. Swap은 두 칸의 내용을 맞바꾸고, Copy output은 마지막으로 결과가 나온 칸을 복사합니다.

Base64란?

Base64는 바이너리 데이터를 A–Z, a–z, 0–9, +, / 64개 문자만으로 표현하는 인코딩입니다. 이메일 첨부, data URL 이미지, HTTP Basic 인증 헤더, JWT처럼 "텍스트만 지나갈 수 있는 통로"에 바이트를 실어 보낼 때 씁니다.

원리는 간단합니다. 3바이트(24비트)를 6비트씩 4조각으로 나누고, 각 조각(0~63)을 문자표의 한 글자로 바꿉니다. 그래서 결과는 원본보다 약 33% 길어집니다. 마지막에 3바이트가 안 채워지면 =를 1~2개 붙여 길이를 4의 배수로 맞춥니다. 예: Man → TWFu, Ma → TWE=.

한글이 깨지지 않는 이유

이 도구는 텍스트를 먼저 UTF-8 바이트로 바꾼 뒤 Base64로 인코딩합니다. 한글 한 글자는 UTF-8로 3바이트, 이모지는 보통 4바이트이므로 안녕(6바이트)은 7JWI64WV(8글자)가 됩니다. 디코딩할 때도 UTF-8로 엄격하게 해석하며, 결과가 올바른 UTF-8 텍스트가 아니면 오류를 표시합니다.

URL-safe Base64

구분62번째63번째패딩
표준 Base64+/= 붙임
URL-safe (Base64URL)-_생략

디코딩은 체크 여부와 상관없이 두 형식을 모두 받아들입니다. -, _를 자동으로 되돌리고 빠진 =도 채워 주며, 중간의 공백·줄바꿈은 무시합니다.

Base64는 암호화가 아닙니다. 누구나 즉시 디코딩할 수 있으니 비밀번호나 개인정보를 "가리는" 용도로 쓰면 안 됩니다. 또 이 도구는 텍스트 전용이라 이미지·PDF 같은 바이너리를 디코딩하면 UTF-8 오류가 납니다.

표준 기준 — RFC 4648

Base64의 문자표와 패딩 규칙은 IETF RFC 4648에 정해져 있어요. 4장이 표준 Base64, 5장이 URL·파일명에 안전한 base64url이에요. 64개 문자에 0~63 값이 이렇게 대응돼요.

값문자값문자
0~25A~Z52~610~9
26~51a~z62 / 63+ / (url-safe는 - _)
광고

길이 미리 계산표

인코딩 결과 길이는 4 × ⌈바이트 수 ÷ 3⌉이에요. 한글은 UTF-8로 글자당 3바이트라 한글 1글자가 정확히 Base64 4글자가 돼요.

원문UTF-8 바이트Base64URL-safe
a1YQ==YQ
ab2YWI=YWI
abc3YWJjYWJj
한글67ZWc6riA같음
안녕하세요157JWI64WV7ZWY7IS47JqU (20자)같음
😀48J+YgA==8J-YgA

1MB 파일을 Base64로 바꾸면 약 1.33MB가 돼요. 이메일(MIME)은 여기에 76자마다 줄바꿈까지 넣어 조금 더 커져요. 이 도구는 디코딩할 때 줄바꿈을 무시하니 메일 원문에서 복사한 값도 그대로 넣으면 돼요.

예시 3가지

  1. HTTP Basic 인증 헤더 — user:pass를 인코딩하면 dXNlcjpwYXNz이고, 헤더는 Authorization: Basic dXNlcjpwYXNz예요. 거꾸로 디코딩하면 비밀번호가 그대로 보이니 Basic 인증은 반드시 HTTPS와 함께 써야 해요.
  2. + / 가 들어가는 값 — <<???>>는 표준으로 PDw/Pz8+Pg==예요. 이걸 URL 쿼리에 그대로 넣으면 +가 공백으로, /가 경로로 읽힐 수 있어요. URL-safe를 켜면 PDw_Pz8-Pg가 돼 그대로 넣을 수 있어요.
  3. EUC-KR로 만든 값 — 옛 시스템이 CP949로 인코딩한 안녕은 vsiz5w==(바이트 BE C8 B3 E7)예요. 이 도구에 넣으면 올바른 UTF-8이 아니라서 "not UTF-8 text" 오류가 나요. 같은 글자의 UTF-8 값은 7JWI64WV예요.

흔한 실수

실수바로잡기
Base64를 암호화로 생각함누구나 바로 되돌릴 수 있어요. 비밀은 암호화하고, 무결성 확인은 해시로.
JavaScript btoa('한글')에서 오류btoa는 1바이트 문자만 받아요. TextEncoder로 UTF-8 바이트를 만든 뒤 인코딩하세요 (이 도구 방식).
URL-safe 값을 표준 디코더에 넣어 실패-→+, _→/로 바꾸고 길이가 4의 배수가 되게 =를 채워요. 이 도구는 자동으로 해요.
쿼리스트링에 표준 Base64를 그대로 붙임URL-safe를 쓰거나 URL 인코딩을 한 번 더 하세요.
광고
광고

자주 묻는 질문

Base64 디코딩하면 한글이 깨져요
원본이 UTF-8이 아닌 EUC-KR(CP949)로 인코딩된 경우입니다. 이 도구는 UTF-8만 해석하므로 "not UTF-8 text" 오류가 표시됩니다. 대부분의 최신 시스템은 UTF-8을 쓰니 생성한 쪽의 문자셋을 확인해 보세요.
끝에 붙은 == 는 무엇인가요?
패딩입니다. 원본 바이트 수가 3의 배수가 아닐 때 길이를 4의 배수로 맞추려고 붙입니다. 1바이트가 남으면 ==, 2바이트가 남으면 =가 붙습니다.
Base64로 바꾸면 용량이 얼마나 늘어나나요?
3바이트가 4글자가 되므로 약 4/3배, 즉 33% 정도 커집니다. 한글은 글자당 3바이트라 한글 1글자가 Base64 4글자에 해당합니다.
JWT 안의 내용을 보려면 이 도구를 써도 되나요?
JWT의 각 부분은 URL-safe Base64라서 디코딩은 가능하지만, 점(.)으로 나눠 한 조각씩 넣어야 합니다. JWT 디코더를 쓰면 헤더·페이로드·만료 시간을 한 번에 볼 수 있습니다.
이미지를 Base64로 바꿀 수 있나요?
이 도구는 텍스트 전용이라 파일은 받지 않아요. 이미지를 data URL(data:image/png;base64,…)로 넣으면 HTTP 요청은 하나 줄지만 크기가 약 33% 커지고 캐시도 따로 안 돼서, 보통 수 KB 이하의 작은 아이콘에만 써요.
base64와 base64url 중 무엇을 써야 하나요?
URL, 파일명, 쿠키, JWT처럼 + / = 가 특별한 뜻을 갖는 곳에는 RFC 4648 5장의 base64url을 써요. 이메일 첨부, PEM 인증서, data URL처럼 일반 텍스트로 옮기는 곳은 표준 Base64가 기본이에요.

관련 도구

이 도구와 함께 보면 좋은 글

광고

더 둘러보기

💻 개발자 다른 도구

🔥 많이 찾는 도구

🔮 재미로 한 번 더

📝 읽어 볼 만한 글

글 전체 보기 →