Base64 인코더로 건너뛰기

RFC 4648 · 인코더 & 디코더

무엇이든 Base64로 인코딩하세요. 업로드는 전혀 없습니다.

텍스트, 파일, 이미지를 위한 무료 온라인 Base64 인코더 및 디코더입니다. 변환은 사용 중인 브라우저 탭에서 JavaScript로 이루어집니다. 아무것도 업로드되지 않으므로 오프라인에서도 계속 작동하며 크기 제한도 없습니다.

  • 입력하는 즉시 인코딩
  • 텍스트, 파일, 이미지
  • URL-safe 및 MIME 모드
  • 광고 없음, 가입 불필요
0 자 · 0 B
0 자 · 0 B
옵션
인코딩 방식

Ctrl+Enter 인코딩 Ctrl+Shift+C 결과 복사 Ctrl+Shift+X 방향 바꾸기

온라인 Base64 인코딩 — 무료, 즉시, 비공개

이 온라인 Base64 인코딩 도구는 서버가 아니라 사용 중인 브라우저에서 작업합니다. 위 입력란에 입력하면 그대로 Base64가 나타납니다. 버튼도, 새로고침도, 업로드도 필요 없습니다. 디코딩으로 바꾸면 반대로 변환하고, 파일 및 이미지 탭을 열면 이미지를 Base64로 인코딩해 HTML이나 CSS에 바로 붙여넣을 수 있는 데이터 URI를 얻을 수 있습니다.

표준이 정의한 기능은 모두 들어 있습니다. 표준 알파벳, URL-safe Base64(RFC 4648 §5), MIME 76자 줄바꿈, LF와 CRLF 줄바꿈 문자, 줄 단위 인코딩, 그리고 UTF-8부터 ISO-8859-1, UTF-16까지 6가지 문자 집합입니다. 브라우저 대신 코드로 Base64 인코딩을 하고 싶다면 아래 코드 예제에서 Python, JavaScript, Linux와 macOS, PowerShell, PHP, Java, Go, C#, Ruby를 다룹니다.

마지막 업데이트

이 도구를 쓰는 이유

차이는 인코딩이 일어나는 곳에 있습니다.

대부분의 Base64 도구는 파일을 서버로 POST해서 거기서 인코딩한 뒤 다운로드 링크를 돌려줍니다. 브라우저가 마이크로초 만에 끝낼 변환을 위해 데이터가 내 컴퓨터를 떠나는 셈입니다. 이 도구는 그런 요청을 절대 보내지 않습니다.

이 Base64 인코더와 일반적인 서버 기반 온라인 Base64 도구의 기능 비교
항목 freebase64encode.com 일반적인 온라인 인코더
데이터가 처리되는 곳 항상 내 브라우저 탭 서버로 업로드
파일 크기 제한 기기 메모리뿐 보통 100 MB까지
서버에 파일 저장 없음 — 전송할 곳이 없음 잠시 보관 후 삭제
오프라인에서도 작동 예, 페이지가 열린 뒤에는 아니요
입력 중 실시간 인코딩 기본으로 켜짐 선택 사항 또는 버튼
인코딩과 디코딩 한 페이지에서 클릭 한 번으로 전환 별도의 두 페이지
이미지 → 데이터 URI + HTML/CSS/Markdown 미리보기와 함께 내장 제공 안 함
9개 언어 코드 예제 같은 페이지에 있음 제공 안 함
크기 증가 표시 바이트와 %를 실시간 표시 표시 안 함
광고와 쿠키 배너 없음, 추적 쿠키도 없음 대개 있음

코드로 하기

Python, JavaScript, Bash, PowerShell 외 5개 언어로 Base64 인코딩.

가장 많이 검색되는 언어별로 바로 복사해 쓸 수 있는 인코딩·디코딩 코드입니다. 누구나 한 번쯤 오후를 날리는 함정도 언어마다 짚어 두었습니다.

Python으로 Base64 인코딩

Python은 표준 라이브러리에 Base64가 있습니다. 흔히 걸리는 부분은 b64encode가 str이 아니라 bytes를 받는다는 점이므로, 텍스트는 먼저 UTF-8로 인코딩해야 합니다.

import base64

# Encode a string ─ note the .encode("utf-8"): b64encode takes bytes, not str
text = "Man is distinguished"
encoded = base64.b64encode(text.encode("utf-8")).decode("ascii")
print(encoded)                       # TWFuIGlzIGRpc3Rpbmd1aXNoZWQ=

# Decode it back
decoded = base64.b64decode(encoded).decode("utf-8")

# URL-safe, unpadded (RFC 4648 §5) ─ the JWT flavour
base64.urlsafe_b64encode(b"data").rstrip(b"=")

# Encode a file, wrapped at 76 characters for MIME
with open("photo.png", "rb") as f:
    mime = base64.encodebytes(f.read()).decode("ascii")

# Build a data URI for an image
uri = "data:image/png;base64," + base64.b64encode(open("photo.png", "rb").read()).decode()

작동 원리

Base64 인코딩은 실제로 이렇게 작동합니다.

Base64는 임의의 바이트를 모든 시스템이 이해하는 64개 문자로 다시 씁니다. 3바이트(24비트)를 가져와 6비트씩 네 묶음으로 다시 자릅니다. 각 묶음은 알파벳 A–Z a–z 0–9 + /의 인덱스가 됩니다. 3바이트는 항상 4문자가 되므로 출력은 정확히 3분의 1만큼 커집니다.

변환 예시: Man → TWFu

텍스트 Man
ASCII 7797110
비트 01001101 01100001 01101110
6비트씩 나누기 010011 010110 000101 101110
인덱스 19 · 22 · 5 · 46
Base64 TWFu

입력 길이가 3의 배수가 아니면 출력이 4의 배수가 되도록 마지막 묶음을 =로 채웁니다. 1바이트가 남으면 ==, 2바이트가 남으면 =가 됩니다.

Base64 인코딩 예시

자주 쓰는 문자열을 UTF-8로 Base64 인코딩한 결과입니다. 위 도구에 붙여넣어 직접 확인해 보세요.

예시 문자열과 Base64 인코딩 결과
입력 Base64 설명
Hello, World! SGVsbG8sIFdvcmxkIQ== 13바이트라 하나가 남아서 = 두 개
Hello World SGVsbG8gV29ybGQ= 11바이트라 = 하나
hello aGVsbG8=
base64 YmFzZTY0 6바이트는 3으로 나누어떨어져 패딩 없음
user:password dXNlcjpwYXNzd29yZA== HTTP Basic 인증 헤더 값
héllo 🎉 aMOpbGxvIPCfjok= UTF-8에서 é는 2바이트, 이모지는 4바이트
{"alg":"HS256","typ":"JWT"} eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 JWT 헤더 — URL-safe, 패딩 없음

Base64 알파벳(인덱스 표)

0부터 63까지의 6비트 값은 각각 문자 하나에 대응합니다. URL-safe 알파벳도 똑같지만 62가 -, 63이 _입니다. =는 패딩이며 알파벳에 속하지 않습니다.

Base64 인덱스 표: 값 0–63과 해당 문자
값 문자 값 문자 값 문자 값 문자
0 A 16 Q 32 g 48 w
1 B 17 R 33 h 49 x
2 C 18 S 34 i 50 y
3 D 19 T 35 j 51 z
4 E 20 U 36 k 52 0
5 F 21 V 37 l 53 1
6 G 22 W 38 m 54 2
7 H 23 X 39 n 55 3
8 I 24 Y 40 o 56 4
9 J 25 Z 41 p 57 5
10 K 26 a 42 q 58 6
11 L 27 b 43 r 59 7
12 M 28 c 44 s 60 8
13 N 29 d 45 t 61 9
14 O 30 e 46 u 62 +
15 P 31 f 47 v 63 /

Base64 방식 비교

“Base64”는 여러 방식을 아우르는 이름입니다. 62개의 영문자와 숫자는 같고, 마지막 두 문자와 패딩, 줄바꿈 방식이 다릅니다. 위 도구는 앞의 세 가지를 만들 수 있습니다.

Base64 방식 비교: 표준, URL-safe, MIME, PEM
방식규격62 / 63번 문자패딩줄바꿈용도
표준 RFC 4648 §4 + / 필수 없음 일반 용도, JSON, 데이터 URI
URL-safe (base64url) RFC 4648 §5 - _ 보통 생략 없음 JWT, URL, 파일 이름
MIME RFC 2045 + / 필수 76자마다 CRLF 이메일 첨부 파일
PEM RFC 7468 + / 필수 64자마다, BEGIN/END 포함 TLS 인증서, 키

Base64가 쓰이는 곳

이메일 첨부 파일

SMTP는 7비트 텍스트용으로 만들어졌습니다. MIME(RFC 2045)은 첨부 파일을 Base64로 인코딩하고 76자마다 줄바꿈해서 메일 서버가 내용을 바꾸지 않고 전달하게 합니다.

데이터 URI

data:image/png;base64,…를 쓰면 작은 이미지, 글꼴, SVG를 HTML이나 CSS에 바로 넣어 요청 하나를 줄일 수 있습니다. 몇 KB 이하라면 이득이지만, 그보다 크면 33% 증가와 캐시를 못 쓰는 손해가 더 큽니다.

JSON과 XML 데이터

두 형식 모두 임의의 바이트를 담을 수 없습니다. Base64는 파일을 어떤 JSON 파서도 통과하는 평범한 문자열로 바꿔 주며, REST API로 바이너리를 보낼 때 이 방법을 씁니다.

JWT와 URL

JSON Web Token은 base64url(+ 와 / 대신 - 와 _ 를 쓰고 패딩이 없는 RFC 4648 §5 방식)을 써서 토큰을 URL, 쿠키, 헤더에 안전하게 넣을 수 있게 합니다.

HTTP Basic 인증

Authorization: Basic은 말 그대로 base64(사용자이름:비밀번호)입니다. 암호화가 아니라 인코딩일 뿐이라서 Basic 인증은 HTTPS에서만 써야 합니다.

설정 파일과 시크릿

Kubernetes Secret, PEM 형식의 TLS 인증서, SSH 키는 모두 바이너리를 Base64로 저장합니다. 덕분에 파일이 읽고, 비교하고, 복사하기 쉬운 텍스트로 남습니다.

오후 한나절을 날리는 여섯 가지 실수

Base64는 암호화가 아닙니다

누구나 명령 하나로 디코딩할 수 있습니다. 비밀번호, API 키, 개인정보를 숨기는 데 절대 쓰지 말고 진짜 암호화를 쓰세요.

문자 집합이 다르면 글자가 깨집니다

Base64는 바이트를 인코딩하고, 텍스트는 문자 집합을 정해야 바이트가 됩니다. UTF-8로 인코딩하고 Latin-1로 디코딩하면 글자가 깨집니다. 양쪽 모두 UTF-8로 맞추세요.

echo는 줄바꿈을 덧붙입니다

echo "hi" | base64는 2바이트가 아니라 3바이트를 인코딩합니다. echo가 \n을 덧붙이기 때문입니다. 입력한 그대로 인코딩하려면 printf %s를 쓰세요.

줄바꿈이 문자열을 바꿉니다

MIME 출력에는 76자마다 CRLF가 들어갑니다. 대부분의 디코더는 공백을 건너뛰지만, “같은” 두 문자열을 엄격히 비교하거나 해시를 내면 한쪽에 줄바꿈이 있을 때 일치하지 않습니다.

+ 와 / 는 URL에서 깨집니다

쿼리 문자열을 폼 방식으로 디코딩하면 +는 공백이 되고, /는 경로를 나눕니다. 값이 URL이나 파일 이름에 들어간다면 항상 URL-safe 방식을 쓰세요.

데이터가 3분의 1 커집니다

3바이트마다 4문자가 됩니다. 큰 업로드를 Base64로 JSON 본문에 넣으면 양쪽 모두 대역폭과 메모리를 더 씁니다. 대신 multipart/form-data로 보내세요.

질문

Base64 인코딩, 궁금한 점을 답해 드립니다.

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

Base64는 바이너리 데이터를 출력 가능한 ASCII 문자 64개(A–Z, a–z, 0–9, +, /)로 나타내는 바이너리-텍스트 인코딩 방식입니다. 이메일 본문, JSON과 XML 문서, HTTP 헤더, URL, HTML 속성처럼 텍스트용으로 만들어진 통로로 바이너리 데이터를 안전하게 보내기 위해 쓰입니다. Base64는 암호화가 아니라 인코딩입니다. 누구나 디코딩할 수 있으므로 기밀성은 없습니다.

텍스트를 온라인에서 Base64로 인코딩하려면 어떻게 하나요?

이 페이지의 입력란에 텍스트를 붙여넣거나 입력하세요. 결과가 출력란에 바로 나타납니다. 입력하는 동안 브라우저에서 인코딩되므로 버튼을 누르거나 새로고침할 필요가 없습니다. 복사 버튼이나 Ctrl+Shift+C로 Base64 문자열을 클립보드에 복사할 수 있습니다.

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

문자열은 먼저 문자 집합(대부분 UTF-8)을 통해 바이트로 바뀌고, 그 바이트가 Base64로 인코딩됩니다. 이 페이지에서는 자동으로 처리되므로 문자열을 입력하고 결과를 복사하면 됩니다. 예를 들어 "Hello, World!"를 Base64로 인코딩하면 SGVsbG8sIFdvcmxkIQ==가 됩니다. 주요 언어에서는 코드 한 줄이면 되니 Python, JavaScript, Bash, PowerShell, PHP, Java, Go, C#, Ruby 예제를 참고하세요.

이 Base64 인코더는 안전하고 개인정보가 보호되나요?

네. 모든 바이트는 사용 중인 브라우저 탭에서 실행되는 JavaScript가 로컬에서 인코딩합니다. 텍스트, 파일, 이미지는 서버로 전송되지 않고, 데이터베이스에 저장되지 않으며, 기록되지도 않습니다. 이 사이트는 업로드 엔드포인트가 전혀 없는 정적 페이지입니다. 인코딩하는 동안 브라우저 DevTools의 네트워크 탭을 열어 보거나, 인터넷을 끊고도 도구가 동작하는지 확인해 직접 검증할 수 있습니다.

Python에서 Base64로 인코딩하려면 어떻게 하나요?

내장 base64 모듈을 쓰세요. 인코딩은 base64.b64encode(data.encode("utf-8")).decode("ascii"), 디코딩은 base64.b64decode(encoded).decode("utf-8")입니다. b64encode는 str이 아니라 bytes를 받기 때문에 입력을 먼저 UTF-8로 인코딩한다는 점에 유의하세요. URL-safe 출력에는 base64.urlsafe_b64encode, 76자 줄바꿈 MIME 출력에는 base64.encodebytes를 씁니다.

PowerShell이나 Windows에서 Base64로 인코딩하려면 어떻게 하나요?

PowerShell에서 문자열은 [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("hello")), 파일은 [Convert]::ToBase64String([IO.File]::ReadAllBytes("C:\path\file.png"))로 인코딩합니다. cmd.exe에서는 certutil -encode in.png out.b64가 모든 Windows에서 동작하지만 BEGIN과 END 헤더 줄이 붙습니다. [Text.Encoding]::Unicode(UTF-16 LE)는 powershell -EncodedCommand에 넘길 때만 쓰세요.

JavaScript에서 Base64로 인코딩하려면 어떻게 하나요?

ASCII 텍스트라면 btoa(str)로 인코딩하고 atob(str)로 디코딩합니다. btoa는 U+00FF를 넘는 문자에서 오류가 나므로 유니코드 텍스트는 먼저 바이트로 바꾸세요: btoa(Array.from(new TextEncoder().encode(str), (b) => String.fromCharCode(b)).join("")). 스프레드 형태인 String.fromCharCode(...bytes)는 입력이 크면 호출 스택이 넘치므로 피하세요. Node.js에서는 Buffer.from(str, "utf8").toString("base64")를 씁니다. 최신 런타임에서는 Uint8Array.prototype.toBase64()도 쓸 수 있습니다.

Linux에서 파일을 Base64로 인코딩하려면 어떻게 하나요?

coreutils의 base64 명령을 쓰세요. base64 file.txt로 인코딩하고 base64 -d file.b64로 디코딩합니다. 줄바꿈 없는 한 줄이 필요하면 -w 0을, MIME 호환 출력이 필요하면 -w 76을 붙입니다. 문자열을 바로 인코딩하려면 파이프로 넘기세요: printf %s "hello" | base64. echo 대신 printf를 써야 끝의 줄바꿈이 인코딩에 포함되지 않습니다.

Mac에서 Base64로 인코딩하려면 어떻게 하나요?

macOS 터미널에는 BSD 버전의 base64 명령이 있습니다. 파일은 base64 -i file.png -o file.b64, 문자열은 printf %s "hello" | base64로 인코딩하고, base64 -D -i file.b64 -o file.png로 디코딩합니다. Linux의 GNU base64와 달리 기본적으로 줄바꿈하지 않으며 -w 옵션이 없습니다. pbcopy로 파이프하면 결과가 바로 클립보드에 복사됩니다.

이미지를 Base64로 인코딩하려면 어떻게 하나요?

이 페이지의 파일 및 이미지 탭을 열고 이미지를 놓으세요. 원본 Base64와 함께 바로 붙여넣을 수 있는 데이터 URI(data:image/png;base64,...), 그리고 HTML, CSS, Markdown 코드가 만들어집니다. Base64로 바꾸면 이미지가 약 33% 커지므로 약 5 KB 이하의 작은 이미지만 넣고, 큰 이미지는 브라우저가 캐시할 수 있는 일반 파일로 제공하는 것이 좋습니다.

URL-safe Base64란 무엇인가요?

표준 Base64는 URL과 파일 이름에서 특별한 의미를 갖는 +와 /를 씁니다. URL-safe Base64(RFC 4648 §5, base64url이라고도 함)는 +를 -로, /를 _로 바꾸고 보통 = 패딩을 생략합니다. JSON Web Token이 쓰는 방식입니다. 이 페이지의 URL-safe 옵션을 켜면 만들 수 있습니다.

Base64 문자열이 = 기호로 끝나는 이유는 무엇인가요?

Base64는 입력을 3바이트씩 묶어 4문자로 바꿉니다. 입력 길이가 3의 배수가 아니면 출력 길이가 4의 배수가 되도록 마지막 묶음을 =로 채웁니다. 1바이트가 남으면 = 두 개, 2바이트가 남으면 = 하나가 붙습니다. 패딩에는 데이터가 없으며 base64url 같은 일부 방식에서는 생략할 수 있습니다.

Base64로 바꾸면 데이터가 얼마나 커지나요?

약 33% 커집니다. 입력 3바이트가 출력 4문자가 되므로 비율은 4/3입니다. 패딩을 포함한 정확한 길이는 입력 n바이트에 대해 4 × ⌈n / 3⌉문자입니다. 예를 들어 10바이트는 16문자, 1 MB는 약 1.33 MB가 됩니다. MIME 모드에서는 줄바꿈 때문에 약 2.6%가 더 늘어납니다(76자마다 2바이트 CRLF). 이 도구는 입력하는 동안 출력란 아래에 정확한 입력·출력 크기와 증가율을 보여 줍니다.

파일 크기 제한이 있나요?

서버를 쓰지 않으므로 서버 쪽 제한은 없습니다. 실제 한계는 기기 메모리와 브라우저 탭의 제한입니다. 데스크톱에서는 보통 수백 MB까지의 파일도 처리되며, 이 도구는 큰 파일을 조각으로 나눠 처리해 브라우저가 멈추지 않게 합니다. 서버로 업로드하는 다른 도구들은 대개 100 MB로 제한합니다.

Base64 인코딩은 유니코드와 이모지도 지원하나요?

네. 텍스트는 먼저 선택한 문자 집합으로 바이트가 됩니다. 기본값인 UTF-8은 이모지를 포함한 모든 유니코드 문자를 지원합니다. 그다음 그 바이트가 Base64로 인코딩됩니다. 글자가 깨지는 가장 흔한 원인은 인코더와 디코더의 문자 집합이 다른 것이므로, 특별한 이유가 없다면 양쪽 모두 UTF-8로 두세요.