파일 업로드
  1. base64hub
  2. 텍스트 도구
  3. Base64 인코더

Base64 인코더: 온라인 텍스트 Base64 인코딩

텍스트를 입력하거나 붙여넣으면 바로 Base64가 나타납니다. 기본값이 UTF-8이라 한글, 악센트 문자, 키릴 문자, 이모지도 올바르게 인코딩되며 URL-safe, 패딩, 줄 바꿈 옵션을 고를 수 있습니다.

무료 가입 없음, 제한 없음 로컬 업로드 없음 27 문자 인코딩, 기본값 UTF-8 업데이트 2026. 10. 27.
입력 0 B출력 0 B크기 –

브라우저에서 처리됩니다. 이 페이지는 데이터를 어디로도 보낼 수 없습니다 – 확인 방법

텍스트를 Base64로 인코딩하는 방법

  1. 입력 · 텍스트 상자에 텍스트를 입력하거나 붙여넣으세요. 페이지를 열면 예시가 들어 있으니, 빈 상태에서 시작하려면 지우기를 누르세요.
  2. 입력하는 동안 출력 · Base64에 Base64가 나타납니다. 입력이 아주 크다면 실시간을 해제하고 실행을 누르세요.
  3. 받는 쪽 시스템이 요구하는 옵션을 설정하세요: URL-safe (- _), 패딩 없음 (=), 줄 바꿈, 문자 인코딩. 기본값(표준 알파벳, 패딩 포함, 한 줄, UTF-8)은 대부분의 API에 맞습니다.
  4. 출력 복사를 누르거나, 다운로드로 결과를 base64.txt로 저장하세요.
  5. 왕복 변환을 확인하려면 바꾸기를 누르세요. Base64를 입력란으로 옮기고 도구를 디코딩 모드로 바꿉니다.

버튼 아래에는 입력 크기(바이트), 출력 크기, 증가 비율이 표시되므로 필드에 길이 제한이 있을 때 유용합니다.

Base64 인코딩의 작동 원리

Base64는 바이트를 다루므로 첫 단계는 문자 인코딩(따로 고르지 않으면 UTF-8)으로 텍스트를 바이트로 바꾸는 것입니다. 인코더는 바이트를 3개씩, 즉 24비트씩 묶어 6비트 숫자 4개로 나누고, 각 숫자를 64개 문자로 된 알파벳 A–Z, a–z, 0–9, +, / 중 한 글자로 씁니다.

대표적인 예는 텍스트 Man입니다. 바이트 4D 61 6E가 TWFu가 됩니다. 마지막 묶음이 1바이트나 2바이트뿐이면 출력 끝을 =로 채웁니다. Ma는 TWE=, M은 TQ==가 됩니다. 전체 과정은 Base64의 작동 원리에서, =를 생략해도 되는 경우는 패딩 설명에서 다룹니다.

n바이트의 출력 길이는 항상 4 × ⌈n / 3⌉문자로, 입력보다 약 33% 깁니다. Base64 크기 계산기가 어떤 크기든 이 계산을 해 주고, Base64 크기 오버헤드는 이 차이가 언제 문제가 되는지 설명합니다. Base64는 누구나 되돌릴 수 있어서 아무것도 숨기지 못합니다. 비밀 값을 넣기 전에 인코딩과 암호화의 차이를 읽어 보세요.

인코딩 옵션

옵션바뀌는 점사용하는 경우
URL-safe (- _)+가 -로, /가 _로 바뀜(RFC 4648 5절)URL, 쿼리 문자열, 파일 이름, 쿠키, JWT. Base64URL 인코더는 기본으로 켜져 있음
패딩 없음 (=)끝의 = 문자를 제거JWT와 대부분의 URL-safe 형식, 어차피 =를 지워 버리는 모든 곳
줄 바꿈: 76 (MIME, LF 또는 CRLF)76자마다 줄 바꿈 삽입이메일 본문과 첨부 파일(MIME 인코더)
줄 바꿈: 64 (PEM)64자마다 줄 바꿈 삽입-----BEGIN과 -----END 줄 사이의 인증서와 키
문자 인코딩인코딩 전에 각 문자가 어떤 바이트가 되는지받는 쪽이 UTF-16, EUC-KR, Windows-1251, Shift_JIS 같은 레거시 인코딩을 기대하지 않는 한 UTF-8

유니코드, 이모지, URL-safe 출력 예시

아래 값은 모두 Python의 base64 모듈로 만든 것이며 이 도구의 출력과 같습니다.

입력설정Base64
HelloUTF-8SGVsbG8=
Hello, world!UTF-8SGVsbG8sIHdvcmxkIQ==
caféUTF-8Y2Fmw6k=
caféISO-8859-1Y2Fm6Q==
€UTF-84oKs
€Windows-1252gA==
👋UTF-88J+Riw==
👋UTF-8, URL-safe, 패딩 없음8J-Riw
ПриветUTF-80J/RgNC40LLQtdGC
ПриветWindows-1251z/Do4uXy

같은 단어라도 문자 인코딩이 다르면 바이트가 달라서 Base64도 달라집니다. é는 UTF-8에서 2바이트(C3 A9), Latin-1에서 1바이트(E9)입니다. 손 흔드는 이모지는 UTF-8로 4바이트이므로 단독으로 인코딩하면 8문자가 되고, 그중 2개가 패딩입니다.

문자 인코딩과 표현할 수 없는 문자

UTF-8은 모든 유니코드 문자를 표현할 수 있어서 잃는 것이 없습니다. 목록의 나머지 26개 문자 인코딩(UTF-16LE/BE, UTF-32LE, ASCII, ISO-8859와 Windows 코드 페이지, KOI8-R/U, CP866, Shift_JIS, EUC-JP, GBK, Big5, EUC-KR)은 그것을 요구하는 시스템을 위해 있습니다. 선택한 문자 인코딩에 없는 문자가 텍스트에 있으면 ?로 바뀌고, 몇 문자가 바뀌었는지 경고가 표시됩니다. 예를 들어 ISO-8859-1에서 €는 Pw==로 인코딩되는데, 이는 물음표 하나일 뿐입니다.

Windows와 .NET 문자열, PowerShell에는 UTF-16LE를 고르세요. 이유는 UTF-16을 Base64로 페이지에서 설명합니다. 7비트 텍스트 밖의 문자를 모두 거부해야 하는 시스템에는 ASCII를 고르세요(ASCII를 Base64로).

줄 바꿈

일반 Base64는 긴 한 줄이며, JSON, HTTP 헤더, URL, 환경 변수에는 이 형태가 필요합니다. 이메일은 76자 줄(RFC 2045)을, PEM 파일은 64자 줄을 씁니다. 줄 바꿈 옵션은 그 너비마다 \n을 넣으며, 76 (MIME, CRLF) 에서는 CRLF를 넣습니다. 이 사이트의 디코더를 비롯한 디코더는 줄 바꿈을 건너뛰므로, 줄 바꿈한 출력도 같은 바이트로 디코딩됩니다. MIME 규칙은 이메일 속 Base64에서 다룹니다.

자주 하는 인코딩 실수

  • 끝에 줄 바꿈이 끼어듭니다. echo Hello | base64는 echo가 \n을 붙이기 때문에 SGVsbG8K를 출력합니다. 텍스트 Hello만 인코딩하면 SGVsbG8=입니다. printf '%s'를 쓰고, 여기에 붙여넣을 때는 입력 바이트 수가 예상과 같은지 확인하세요.
  • btoa()가 유니코드에서 예외를 던집니다. 브라우저에서 btoa("Grüße 👋")는 InvalidCharacterError를 일으킵니다. btoa는 Latin-1 문자만 받기 때문입니다. 아래 코드처럼 먼저 UTF-8 바이트로 바꾸세요.
  • 받는 쪽이 다른 문자 인코딩을 씁니다. UTF-8로 인코딩했는데 상대가 Latin-1로 디코딩하면 café가 café로 깨집니다. 한글을 EUC-KR로 읽어도 마찬가지로 깨집니다. 문자 인코딩을 맞추거나, 여기서 받는 쪽의 문자 인코딩을 고르세요.
  • 두 번 인코딩합니다. SGVsbG8=의 Base64는 U0dWc2JHOD0=입니다. 값을 디코딩했는데 또 Base64가 나온다면 파이프라인 어딘가에서 한 번 더 인코딩한 것입니다.
  • +와 /가 URL을 망가뜨립니다. 쿼리 문자열에서 +는 공백으로 읽힙니다. URL-safe 옵션이나 Base64URL 인코더를 쓰거나, 값을 퍼센트 인코딩하세요.

JavaScript, Python, 명령줄에서 Base64 인코딩

브라우저 JavaScript에서는 TextEncoder로 문자열을 UTF-8 바이트로 바꾼 뒤 바이트를 인코딩합니다. 최신 브라우저에서는 bytes.toBase64()를 바로 호출할 수 있습니다(Uint8Array.toBase64).

const bytes = new TextEncoder().encode("Grüße 👋");
let bin = "";
for (const b of bytes) bin += String.fromCharCode(b);
btoa(bin);                                   // "R3LDvMOfZSDwn5GL"

// Node.js
Buffer.from("Grüße 👋", "utf8").toString("base64");     // "R3LDvMOfZSDwn5GL"
Buffer.from("👋", "utf8").toString("base64url");         // "8J-Riw"

Python의 b64encode는 바이트를 받아 바이트를 돌려줍니다.

import base64

base64.b64encode("Grüße 👋".encode("utf-8")).decode("ascii")
# 'R3LDvMOfZSDwn5GL'
base64.urlsafe_b64encode("👋".encode()).rstrip(b"=").decode()
# '8J-Riw'

Linux와 macOS에서는 base64 명령이 표준 입력을 인코딩합니다.

printf '%s' 'Grüße 👋' | base64
base64 -w 0 file.bin > file.b64

첫 번째 명령은 R3LDvMOfZSDwn5GL을 출력합니다. Linux의 GNU base64는 기본으로 76열에서 출력을 줄 바꿈하며 -w 0으로 끌 수 있습니다. macOS 버전은 따로 지정하지 않으면 줄 바꿈하지 않습니다. 다른 언어와 예외 상황은 JavaScript의 Base64, Node.js, Python, PHP에서 볼 수 있습니다.

텍스트 대신 파일을 인코딩하나요?

이미지, PDF 등 모든 파일은 파일 인코더에서 처리하며 data URI와 JSON 출력도 지원합니다.

파일 → Base64

자주 묻는 질문

문자열을 Base64로 인코딩하려면 어떻게 하나요?

위 입력란에 문자열을 붙여넣고 출력란에서 결과를 복사하세요. 코드에서는 문자열을 UTF-8 바이트로 바꾼 뒤 그 바이트를 인코딩합니다. Python은 base64.b64encode(s.encode()), Node.js는 Buffer.from(s).toString("base64")입니다.

Base64 끝에 =나 ==가 붙는 이유는 무엇인가요?

Base64는 3바이트 단위로 동작합니다. 입력 길이가 3의 배수가 아니면 마지막 블록이 모자라고, =가 빠진 바이트를 표시합니다. 남은 바이트가 2개면 = 하나, 1개면 ==입니다. 자세한 내용은 패딩 설명에 있습니다.

같은 텍스트인데 다른 곳에서 인코딩하면 Base64가 달라지는 이유는 무엇인가요?

대개 바이트에 눈에 보이지 않는 차이가 있습니다. 끝의 줄 바꿈(echo가 하나 붙임), 다른 문자 인코딩(UTF-8, Latin-1, UTF-16, EUC-KR 등), 유니코드 정규화가 원인입니다. 도구 아래에 표시되는 입력 바이트 수를 비교해 보세요.

Base64 인코딩으로 비밀번호를 숨길 수 있나요?

아닙니다. Base64에는 키가 없어서 누구나 1초 만에 디코딩할 수 있습니다. 데이터 전송에만 쓰고, 보호가 필요하면 실제 암호화나 해시를 사용하세요. 인코딩과 암호화의 차이를 참고하세요.

Base64로 인코딩하면 텍스트가 얼마나 커지나요?

3바이트가 4문자가 되므로 출력은 약 33% 커지고, 줄 바꿈을 넣으면 그만큼 더 늘어납니다. UTF-8 100바이트는 136문자가 됩니다.