Base64 인코딩
무료 온라인 Base64 인코딩/디코딩 도구. UTF-8/ASCII/ISO-8859-1 문자 세트를 지원하며 Standard/URL-Safe/MIME 세 가지 변형을 제공합니다. 실시간으로 볼륨 팽창률을 표시하며, MIME 줄바꿈은 RFC 2045 표준을 준수합니다.
무료 온라인 Base64 인코딩/디코딩 도구. UTF-8/ASCII/ISO-8859-1 문자 세트를 지원하며 Standard/URL-Safe/MIME 세 가지 변형을 제공합니다. 실시간으로 볼륨 팽창률을 표시하며, MIME 줄바꿈은 RFC 2045 표준을 준수합니다.
아닙니다. Base64는 텍스트를 또 다른 가역적인 표현 형식으로 변환할 뿐, 누구나 쉽게 원본 텍스트로 디코딩할 수 있습니다. 민감한 데이터(비밀번호, Token)를 다룰 때는 AES 등 진정한 암호화 방식을 사용하세요. Base64는 데이터 형식 변환에 적합하며, 텍스트 시스템에서 바이너리 데이터를 쉽게 전송하기 위한 것입니다.
AES 암호화 도구Base64 인코딩은 원본 데이터 볼륨을 약 33% 증가시킵니다. 이는 3바이트(24비트)마다 4개의 Base64 문자로 인코딩되기 때문입니다. 예를 들어 100바이트 텍스트는 인코딩 후 약 133바이트가 됩니다. 도구 하단에 실시간으로 팽창률이 표시되어 데이터 크기를 평가할 수 있습니다. 예: `Hello` → `SGVsbG8=` (볼륨 +33%).
Base64 통계 도구Standard는 표준 Base64로 A-Z, a-z, 0-9, +, / 문자를 사용합니다. URL-Safe는 +/를 -_로 대체하여 URL 매개변수와 JWT Token에 적합합니다. MIME는 76자마다 줄바꿈을 삽입하며 RFC 2045 이메일 전송 표준을 준수하여 이메일 첨부파일과 여러 줄 텍스트에 적합합니다.
URL-Safe Base64MIME Base64JWT는 Base64URL 인코딩(URL-Safe 변형)을 사용합니다. URL-Safe 모드를 선택한 후 JWT의 첫 번째 세그먼트(header) 또는 두 번째 세그먼트(payload)를 붙여넣기만 하면 디코딩됩니다. JWT의 세 번째 세그먼트는 서명이므로 디코딩하여 검증해서는 안 된다는 점에 유의하세요.
JWT 도구Base64 인코딩 결과의 길이는 4의 배수여야 합니다. 입력 길이가 3의 배수가 아닐 경우 = 문자로 채워집니다. URL-Safe 변형은 padding을 사용하지 않습니다. 도구는 padding을 자동으로 처리하며, 디코딩 시 = 문자를 자동으로 제거합니다.
Base64 Padding 도구btoa와 atob는 브라우저 네이티브 API로, Latin-1(ISO-8859-1) 문자 세트를 다루며 각 문자는 1바이트입니다. 한국어/중국어 문자는 UTF-8에서 3바이트를 차지하므로 직접 전달하면 오류가 발생합니다. 해결 방법은 먼저 encodeURIComponent로 한국어를 UTF-8 바이트 시퀀스의 %xx 형식으로 변환한 다음, unescape로 Latin-1 문자열로 변환한 후 btoa로 인코딩하는 것입니다.
Data URI는 데이터를 직접 URL에 내장할 수 있는 URI 형식으로, 구문은 다음과 같습니다: `data:[<mediatype>][;base64],<data>`. 예를 들어 `data:image/png;base64,iVBORw0KGgo...`처럼 사용합니다. 작은 아이콘이나 CSS 배경 이미지 등을 내장하여 HTTP 요청 수를 줄이는 데 자주 사용됩니다. 하지만 Base64는 볼륨을 33% 증가시키므로 작은 파일에만 적합하며, 큰 파일은 일반 URL을 사용해야 합니다.
Data URI 도구Base64를 이미지로 변환Base64는 64개의 인쇄 가능한 ASCII 문자를 기반으로 한 바이너리-텍스트 간 인코딩 방식으로, RFC 2045(MIME 표준)에서 처음 정의되었습니다. Base64는 3바이트(24비트)마다 4개의 Base64 문자(A-Z, a-z, 0-9, +, /)로 변환하여 바이너리 데이터를 HTTP 헤더, JSON 페이로드, XML 문서, URL 쿼리 매개변수 등 텍스트만 지원하는 시스템을 통해 안전하게 전송할 수 있도록 합니다.
**Base64는 암호화가 아닙니다**. 데이터 형식 변환만 제공하며 누구나 쉽게 디코딩할 수 있습니다. 민감한 데이터를 보호해야 하는 경우 AES 등 진정한 암호화 방식을 사용하세요. Base64의 대표적인 용도로는 HTTP Basic Authentication(`Authorization: Basic dXNlcjpwYXNz`), JWT Token의 header와 payload 세그먼트(Base64URL 형식), Data URI(`data:image/png;base64,...`), 이메일 첨부파일 MIME 인코딩 등이 있습니다.
**URL-Safe Base64**(RFC 4648 §5)는 표준 Base64의 +/를 -_로 대체하고 일반적으로 padding의 =를 생략합니다. 이를 통해 인코딩 결과를 URL, 파일 경로, JSON 필드에 안전하게 포함할 수 있습니다. JWT Token, OAuth PKCE의 code_verifier, AWS Signature V4는 모두 URL-Safe Base64 인코딩을 사용합니다.
**MIME 줄바꿈**은 RFC 2045에서 규정한 줄당 76자를 초과하지 않는 표준입니다. Base64 콘텐츠가 이메일이나 줄바꿈 표시가 필요한 특정 시나리오에서 사용될 때 MIME 변형은 76자마다 줄바꿈 문자(`\n`)를 자동으로 삽입합니다. 이는 이메일 첨부파일 전송의 표준 형식입니다.
이 도구는 브라우저 네이티브의 **btoa/atob API**를 사용하며 UTF-8 안전 처리 로직과 결합하여 한국어, 중국어, emoji 등 멀티바이트 문자가 올바르게 인코딩되도록 보장합니다. 모든 계산은 로컬에서 완료되며 데이터는 어떤 서버로도 전송되지 않습니다. 브라우저 개발자 도구의 네트워크 패널을 열어 외부 요청이 전혀 없음을 확인할 수 있습니다.
| 특성 | Standard | URL-Safe | MIME |
|---|---|---|---|
| 특수 문자 | + / | - _ | + / |
| Padding(=) | 사용 | 일반적으로 생략 | 사용 |
| 줄바꿈 | 없음 | 없음 | 76자마다 줄바꿈 |
| 표준 | RFC 4648 §4 | RFC 4648 §5 | RFC 2045 |
| 주요 사용 사례 | Data URI, 범용 인코딩 | JWT, URL 매개변수, 파일명 | 이메일 첨부파일, SMTP 전송 |
| 인코딩 방식 | 문자 수 | 문자 세트 특징 | 볼륨 팽창 | 주요 용도 |
|---|---|---|---|---|
Base16 (Hex) | 16 | 0-9, A-F | 100% | 디버깅, 해시 표시 |
Base32 | 32 | A-Z, 2-7(대문자로 혼동 방지) | 60% | DNS, TOTP 키, QR 코드 |
Base58 | 58 | 혼동하기 쉬운 문자 0/O/I/l 제외 | 38% | 비트코인 주소, 암호화폐 |
Base62 | 62 | A-Z, a-z, 0-9 | 34% | URL 단축, ID 인코딩 |
Base64 | 64 | A-Z, a-z, 0-9, +, / | 33% | Data URI, MIME, JWT(URL-Safe 변형) |
// 编码(支持 UTF-8 中文)
function b64Encode(str) {
return btoa(unescape(encodeURIComponent(str)));
}
// 解码(支持 UTF-8 中文)
function b64Decode(str) {
return decodeURIComponent(escape(atob(str)));
}
// URL-Safe 编码(用于 JWT / OAuth)
function b64UrlEncode(str) {
return btoa(unescape(encodeURIComponent(str)))
.replace(/\+/g, '-')
.replace(/\//g, '_')
.replace(/=+$/, '');
}
console.log(b64Encode('Hello 世界')); // SGVsbG8g5LiW55WM
console.log(b64Decode('SGVsbG8g5LiW55WM')); // Hello 世界import base64
# Standard 编码(UTF-8)
encoded = base64.b64encode('Hello 世界'.encode('utf-8'))
print(encoded.decode()) # SGVsbG8g5LiW55WM
# Standard 解码
decoded = base64.b64decode(encoded).decode('utf-8')
print(decoded) # Hello 世界
# URL-Safe 编码(用于 JWT / OAuth)
url_safe = base64.urlsafe_b64encode('Hello 世界'.encode('utf-8'))
print(url_safe.decode()) # SGVsbG8g5LiW55WM(无 padding 需手动去除)
# 去除 padding(JWT 标准做法)
url_safe_no_pad = url_safe.decode().rstrip('=')
print(url_safe_no_pad)import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class Base64Example {
public static void main(String[] args) {
String text = "Hello 世界";
// Standard 编码
String encoded = Base64.getEncoder()
.encodeToString(text.getBytes(StandardCharsets.UTF_8));
System.out.println(encoded); // SGVsbG8g5LiW55WM
// Standard 解码
String decoded = new String(
Base64.getDecoder().decode(encoded), StandardCharsets.UTF_8);
System.out.println(decoded); // Hello 世界
// URL-Safe 编码(用于 JWT / URL)
String urlSafe = Base64.getUrlEncoder().withoutPadding()
.encodeToString(text.getBytes(StandardCharsets.UTF_8));
System.out.println(urlSafe);
// MIME 编码(76字符换行)
String mime = Base64.getMimeEncoder()
.encodeToString(text.getBytes(StandardCharsets.UTF_8));
}
}