RFC 4648 · 인코더 & 디코더
무엇이든 Base64로 인코딩하세요. 업로드는 전혀 없습니다.
텍스트, 파일, 이미지를 위한 무료 온라인 Base64 인코더 및 디코더입니다. 변환은 사용 중인 브라우저 탭에서 JavaScript로 이루어집니다. 아무것도 업로드되지 않으므로 오프라인에서도 계속 작동하며 크기 제한도 없습니다.
- 입력하는 즉시 인코딩
- 텍스트, 파일, 이미지
- URL-safe 및 MIME 모드
- 광고 없음, 가입 불필요
여기에 파일이나 이미지를 놓으세요
또는 . 아무것도 업로드되지 않으며 파일은 컴퓨터 밖으로 나가지 않습니다.
옵션
바로 붙여넣기
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해서 거기서 인코딩한 뒤 다운로드 링크를 돌려줍니다. 브라우저가 마이크로초 만에 끝낼 변환을 위해 데이터가 내 컴퓨터를 떠나는 셈입니다. 이 도구는 그런 요청을 절대 보내지 않습니다.
| 항목 | 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() JavaScript로 Base64 인코딩
btoa()는 전통적인 브라우저 API지만 U+00FF를 넘는 문자가 있으면 InvalidCharacterError를 던집니다. 유니코드 텍스트는 TextEncoder로 먼저 바이트로 바꾸세요.
// Browser, ASCII only
btoa("hello"); // "aGVsbG8="
atob("aGVsbG8="); // "hello"
// Browser, Unicode-safe ─ btoa() throws above U+00FF
const bytes = new TextEncoder().encode("héllo 🎉");
const b64 = btoa(Array.from(bytes, (b) => String.fromCharCode(b)).join(""));
const text = new TextDecoder().decode(
Uint8Array.from(atob(b64), (c) => c.charCodeAt(0))
);
// Node.js
Buffer.from("hello", "utf8").toString("base64");
Buffer.from(b64, "base64").toString("utf8");
// Modern runtimes ─ no btoa() dance needed
new TextEncoder().encode("hello").toBase64(); // "aGVsbG8="
Uint8Array.fromBase64("aGVsbG8=");
// URL-safe: swap the two characters URLs reserve, then drop padding
const urlSafe = b64.replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
// Encode a file the user picked, without uploading it
const buf = new Uint8Array(await file.arrayBuffer());
const fileB64 = btoa(Array.from(buf, (b) => String.fromCharCode(b)).join("")); Linux, macOS, Bash에서 Base64 인코딩
GNU coreutils 덕분에 모든 Linux에 base64 명령이 있습니다. macOS에는 옵션이 다른 BSD 버전이 들어 있어 아래에서 둘 다 다룹니다.
# Encode a file
base64 photo.png > photo.b64
# Encode a string ─ use printf, not echo, or you encode a trailing newline too
printf %s 'hello' | base64 # aGVsbG8=
echo 'hello' | base64 # aGVsbG8K ← the K is the newline
# One unbroken line (GNU): disable wrapping
base64 -w 0 photo.png
# MIME-compliant 76-character lines
base64 -w 76 photo.png
# Decode
base64 -d photo.b64 > photo.png
echo 'aGVsbG8=' | base64 --decode
# URL-safe output
base64 -w 0 photo.png | tr '+/' '-_' | tr -d '='
# macOS / BSD base64 ─ no -w flag; use -i / -o, and -D to decode
base64 -i photo.png -o photo.b64
base64 -D -i photo.b64 -o photo.png
# Also available almost everywhere ─ -A keeps it on one line
openssl base64 -A -in photo.png
# Copy straight to the clipboard on macOS
base64 -i photo.png | pbcopy PowerShell과 Windows에서 Base64 인코딩
PowerShell은 .NET을 바로 호출합니다. 텍스트 인코딩은 신중히 고르세요. [Text.Encoding]::Unicode는 UTF-16 LE로, powershell -EncodedCommand가 요구하는 형식이지만 대부분의 API가 원하는 형식은 아닙니다.
# Encode a string as UTF-8
$b64 = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes('hello')) # aGVsbG8=
# Decode it back
[Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($b64))
# Encode a file
[Convert]::ToBase64String([IO.File]::ReadAllBytes("$PWD\photo.png")) | Set-Content photo.b64
# Decode a file
[IO.File]::WriteAllBytes("$PWD\photo.png", [Convert]::FromBase64String((Get-Content photo.b64 -Raw)))
# -EncodedCommand needs UTF-16 LE, not UTF-8
$cmd = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes('Get-Date'))
powershell -EncodedCommand $cmd
# cmd.exe: certutil ships with Windows (adds BEGIN/END header lines)
certutil -encode photo.png photo.b64
certutil -decode photo.b64 photo.png PHP로 Base64 인코딩
base64_encode()와 base64_decode()는 확장 없이 쓸 수 있는 내장 함수입니다. 신뢰할 수 없는 입력에는 base64_decode()의 strict 모드를 쓰세요.
$encoded = base64_encode('hello'); // aGVsbG8=
$decoded = base64_decode($encoded);
// Strict mode returns false instead of silently skipping invalid characters
$safe = base64_decode($input, true);
if ($safe === false) { /* not valid Base64 */ }
// URL-safe, unpadded
$url = rtrim(strtr(base64_encode($raw), '+/', '-_'), '=');
// A file as a data URI
$uri = 'data:image/png;base64,' . base64_encode(file_get_contents('photo.png'));
// MIME, 76-character lines
$mime = chunk_split(base64_encode($raw), 76, "\r\n"); Java로 Base64 인코딩
java.util.Base64는 Java 8부터 JDK에 포함되어 있고 기본, URL-safe, MIME의 세 가지 인코더를 제공하므로 외부 라이브러리가 필요한 경우는 드뭅니다.
import java.util.Base64;
import java.nio.charset.StandardCharsets;
import java.nio.file.*;
// Always name the charset explicitly ─ the platform default is a portability bug
String encoded = Base64.getEncoder()
.encodeToString("hello".getBytes(StandardCharsets.UTF_8));
byte[] raw = Base64.getDecoder().decode(encoded);
String text = new String(raw, StandardCharsets.UTF_8);
// URL-safe, unpadded (RFC 4648 §5)
String jwtPart = Base64.getUrlEncoder().withoutPadding().encodeToString(bytes);
// MIME ─ 76-character lines separated by CRLF
String mime = Base64.getMimeEncoder()
.encodeToString(Files.readAllBytes(Path.of("photo.png"))); Go로 Base64 인코딩
encoding/base64는 네 가지 인코딩을 제공합니다. Std와 URL은 패딩이 있고, RawStd와 RawURL은 패딩이 없는 버전입니다.
import (
"encoding/base64"
"io"
"os"
)
encoded := base64.StdEncoding.EncodeToString([]byte("hello")) // aGVsbG8=
decoded, err := base64.StdEncoding.DecodeString(encoded)
if err != nil { /* not valid Base64 */ }
// URL-safe and unpadded ─ what JWT libraries use
token := base64.RawURLEncoding.EncodeToString(raw)
// A file
data, _ := os.ReadFile("photo.png")
uri := "data:image/png;base64," + base64.StdEncoding.EncodeToString(data)
// Stream a large file instead of holding it all in memory
f, _ := os.Open("video.mp4")
defer f.Close()
w := base64.NewEncoder(base64.StdEncoding, os.Stdout)
io.Copy(w, f)
w.Close() // Close() flushes the final partial group ─ don't skip it C#으로 Base64 인코딩
일반적인 경우에는 Convert.ToBase64String()이면 충분합니다. URL-safe 방식은 .NET 9에 추가된 System.Buffers.Text.Base64Url을 쓰세요.
using System;
using System.IO;
using System.Text;
string encoded = Convert.ToBase64String(Encoding.UTF8.GetBytes("hello"));
string text = Encoding.UTF8.GetString(Convert.FromBase64String(encoded));
// MIME ─ inserts CRLF every 76 characters
Convert.ToBase64String(bytes, Base64FormattingOptions.InsertLineBreaks);
// URL-safe (.NET 9+)
System.Buffers.Text.Base64Url.EncodeToString(bytes);
// A file as a data URI
string uri = "data:image/png;base64," +
Convert.ToBase64String(File.ReadAllBytes("photo.png"));
// Validate untrusted input without throwing
if (Convert.TryFromBase64String(input, buffer, out int written)) { /* ok */ } Ruby로 Base64 인코딩
encode64 대신 strict_encode64를 쓰세요. encode64는 출력을 60자마다 줄바꿈하고 끝에 줄바꿈을 붙여서, 해시를 비교할 때 놀라게 됩니다.
require 'base64'
encoded = Base64.strict_encode64('hello') # "aGVsbG8="
decoded = Base64.decode64(encoded)
# encode64 wraps at 60 chars and adds a trailing newline ─ rarely what you want
Base64.encode64('hello') # "aGVsbG8=\n"
# URL-safe (RFC 4648 §5)
Base64.urlsafe_encode64(raw, padding: false)
# A file ─ binread avoids any encoding conversion
Base64.strict_encode64(File.binread('photo.png')) 작동 원리
Base64 인코딩은 실제로 이렇게 작동합니다.
Base64는 임의의 바이트를 모든 시스템이 이해하는 64개 문자로 다시 씁니다. 3바이트(24비트)를 가져와 6비트씩 네 묶음으로 다시 자릅니다. 각 묶음은 알파벳 A–Z a–z 0–9 + /의 인덱스가 됩니다. 3바이트는 항상 4문자가 되므로 출력은 정확히 3분의 1만큼 커집니다.
변환 예시: Man → TWFu
| 텍스트 | M | a | n |
|---|---|---|---|
| ASCII | 77 | 97 | 110 |
| 비트 | 01001101 01100001 01101110 | ||
| 6비트씩 나누기 | 010011 010110 000101 101110 | ||
| 인덱스 | 19 · 22 · 5 · 46 | ||
| Base64 | TWFu | ||
입력 길이가 3의 배수가 아니면 출력이 4의 배수가 되도록 마지막 묶음을 =로 채웁니다. 1바이트가 남으면 ==, 2바이트가 남으면 =가 됩니다.
Base64 인코딩 예시
자주 쓰는 문자열을 UTF-8로 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이 _입니다. =는 패딩이며 알파벳에 속하지 않습니다.
| 값 | 문자 | 값 | 문자 | 값 | 문자 | 값 | 문자 |
|---|---|---|---|---|---|---|---|
| 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개의 영문자와 숫자는 같고, 마지막 두 문자와 패딩, 줄바꿈 방식이 다릅니다. 위 도구는 앞의 세 가지를 만들 수 있습니다.
| 방식 | 규격 | 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로 두세요.