logo
GeekFormat

Base64 인코딩

입력 텍스트
0글자

무료 온라인 Base64 인코딩/디코딩 도구. UTF-8/ASCII/ISO-8859-1 문자 세트를 지원하며 Standard/URL-Safe/MIME 세 가지 변형을 제공합니다. 실시간으로 볼륨 팽창률을 표시하며, MIME 줄바꿈은 RFC 2045 표준을 준수합니다.

관련 추천

사용 사례

  • JWT 디버깅: JWT의 header와 payload 세그먼트(Base64URL 형식)를 디코딩하여 Token 클레임 내용 확인
  • Basic Auth: username:password를 HTTP Basic 인증 자격 증명으로 인코딩
  • OAuth 개발: PKCE 시나리오에서 code_verifier 생성 또는 code_challenge 검증
  • API 디버깅: JSON 데이터 인코딩 또는 API가 반환하는 Base64 필드 내용 디코딩
  • Data URI 이미지 내장: 작은 아이콘을 data:image/...;base64,... 형식으로 변환하여 CSS/HTML에 내장
  • 이메일 첨부파일 인코딩: MIME Base64 형식으로 이메일 바이너리 첨부파일 인코딩

주요 기능

  • Encode/Decode 원클릭 전환: 인코딩과 디코딩 모드를 자유롭게 전환하고 출력을 직접 입력으로 변환하여 순환 처리 지원
  • 세 가지 문자 세트 지원: UTF-8(한국어/중국어/emoji), ASCII, ISO-8859-1, 전문가 수준의 다양한 시나리오 커버
  • 세 가지 변형 출력: Standard(표준), URL-Safe(JWT/OAuth/PKCE 안전), MIME(RFC 2045 표준 76자 줄바꿈)
  • 실시간 볼륨 통계: 입력/출력 문자 수와 팽창률을 실시간으로 표시(Base64는 약 33% 볼륨 증가)
  • 친절한 오류 알림: 문자가 범위를 벗어날 때 단순한 오류 대신 구체적인 오류 메시지 표시
  • 드래그 가능한 구분선: PC에서 좌우 편집 영역 비율을 조정하여 현재 작업에 집중 가능
  • 모바일 독립 Tab: 휴대폰/태블릿 사용자가 입력 영역과 출력 영역을 독립적으로 전환하여 부드러운 경험 제공

이용 방법

  1. 모드 선택: Encode(인코딩) 또는 Decode(디코딩)를 클릭하여 처리 방향 전환
  2. 변형 선택: Standard(표준), URL-Safe(JWT/OAuth), MIME(이메일 형식 76자 줄바꿈)
  3. 내용 입력: 텍스트 또는 Base64 문자열을 붙여넣으면 자동으로 실시간 처리
  4. 통계 확인: 하단에 문자 수와 볼륨 팽창률 표시(인코딩 시 약 33% 볼륨 증가)
  5. 결과 복사: 원클릭으로 Base64 문자열 또는 디코딩된 텍스트 복사

자주 묻는 질문

Base64 인코딩과 암호화는 같은 것인가요?

아닙니다. Base64는 텍스트를 또 다른 가역적인 표현 형식으로 변환할 뿐, 누구나 쉽게 원본 텍스트로 디코딩할 수 있습니다. 민감한 데이터(비밀번호, Token)를 다룰 때는 AES 등 진정한 암호화 방식을 사용하세요. Base64는 데이터 형식 변환에 적합하며, 텍스트 시스템에서 바이너리 데이터를 쉽게 전송하기 위한 것입니다.

AES 암호화 도구

Base64 인코딩 후 볼륨은 얼마나 증가하나요?

Base64 인코딩은 원본 데이터 볼륨을 약 33% 증가시킵니다. 이는 3바이트(24비트)마다 4개의 Base64 문자로 인코딩되기 때문입니다. 예를 들어 100바이트 텍스트는 인코딩 후 약 133바이트가 됩니다. 도구 하단에 실시간으로 팽창률이 표시되어 데이터 크기를 평가할 수 있습니다. 예: `Hello` → `SGVsbG8=` (볼륨 +33%).

Base64 통계 도구

Standard, URL-Safe, MIME 세 가지 변형의 차이점은 무엇인가요?

Standard는 표준 Base64로 A-Z, a-z, 0-9, +, / 문자를 사용합니다. URL-Safe는 +/를 -_로 대체하여 URL 매개변수와 JWT Token에 적합합니다. MIME는 76자마다 줄바꿈을 삽입하며 RFC 2045 이메일 전송 표준을 준수하여 이메일 첨부파일과 여러 줄 텍스트에 적합합니다.

URL-Safe Base64MIME Base64

JWT의 header나 payload를 디코딩하려면 어떻게 해야 하나요?

JWT는 Base64URL 인코딩(URL-Safe 변형)을 사용합니다. URL-Safe 모드를 선택한 후 JWT의 첫 번째 세그먼트(header) 또는 두 번째 세그먼트(payload)를 붙여넣기만 하면 디코딩됩니다. JWT의 세 번째 세그먼트는 서명이므로 디코딩하여 검증해서는 안 된다는 점에 유의하세요.

JWT 도구

Base64의 Padding(패딩)이란 무엇인가요?

Base64 인코딩 결과의 길이는 4의 배수여야 합니다. 입력 길이가 3의 배수가 아닐 경우 = 문자로 채워집니다. URL-Safe 변형은 padding을 사용하지 않습니다. 도구는 padding을 자동으로 처리하며, 디코딩 시 = 문자를 자동으로 제거합니다.

Base64 Padding 도구

JavaScript의 btoa와 atob가 왜 한국어/중국어를 지원하지 않나요?

btoa와 atob는 브라우저 네이티브 API로, Latin-1(ISO-8859-1) 문자 세트를 다루며 각 문자는 1바이트입니다. 한국어/중국어 문자는 UTF-8에서 3바이트를 차지하므로 직접 전달하면 오류가 발생합니다. 해결 방법은 먼저 encodeURIComponent로 한국어를 UTF-8 바이트 시퀀스의 %xx 형식으로 변환한 다음, unescape로 Latin-1 문자열로 변환한 후 btoa로 인코딩하는 것입니다.

Data URI Scheme이란 무엇인가요? Base64로 이미지를 어떻게 삽입하나요?

Data URI는 데이터를 직접 URL에 내장할 수 있는 URI 형식으로, 구문은 다음과 같습니다: `data:[<mediatype>][;base64],<data>`. 예를 들어 `data:image/png;base64,iVBORw0KGgo...`처럼 사용합니다. 작은 아이콘이나 CSS 배경 이미지 등을 내장하여 HTTP 요청 수를 줄이는 데 자주 사용됩니다. 하지만 Base64는 볼륨을 33% 증가시키므로 작은 파일에만 적합하며, 큰 파일은 일반 URL을 사용해야 합니다.

Data URI 도구Base64를 이미지로 변환

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 등 멀티바이트 문자가 올바르게 인코딩되도록 보장합니다. 모든 계산은 로컬에서 완료되며 데이터는 어떤 서버로도 전송되지 않습니다. 브라우저 개발자 도구의 네트워크 패널을 열어 외부 요청이 전혀 없음을 확인할 수 있습니다.

术语表

RFC 4648
IETF에서 발표한 Base16/Base32/Base64 인코딩 공식 표준. 표준 Base64와 URL-Safe Base64 두 가지 알파벳과 padding, 줄바꿈, 비알파벳 문자 처리 등의 규칙을 정의합니다. 현재 Base64 인코딩의 사실상 표준이며 초기 RFC 3548을 대체합니다.URL-Safe Base64 도구Base64 Padding 도구
RFC 2045 (MIME)
다목적 인터넷 메일 확장(MIME) 표준. Base64를 이메일 콘텐츠 전송 인코딩 방식으로 처음 채택했습니다. Base64 인코딩은 줄당 76자를 초과하지 않고 CRLF로 줄바꿈해야 한다고 규정하며, 이를 MIME Base64 변형이라고 합니다.MIME Base64 도구
Base64URL(URL-Safe Base64)
RFC 4648 §5에서 정의한 URL 안전 변형. 표준 Base64의 +를 -로, /를 _로 대체하고 일반적으로 padding의 = 문자를 생략합니다. JWT Token, OAuth PKCE, URL 매개변수, 파일명 등의 시나리오에서 널리 사용됩니다.URL-Safe Base64 도구JWT 도구
MIME Base64
RFC 2045 표준을 준수하는 Base64 변형으로, 76자마다 줄바꿈 문자(CRLF)를 삽입합니다. 주로 이메일 첨부파일 전송에 사용됩니다. 이는 초기 SMTP 프로토콜에 한 줄 길이 제한이 있었기 때문입니다.MIME Base64 도구
Padding(패딩)
Base64 인코딩 결과의 길이는 4의 배수여야 합니다. 입력 바이트 수가 3의 배수가 아닐 경우 끝을 = 문자로 채웁니다. 표준 Base64는 padding을 사용하며 Base64URL은 일반적으로 padding을 생략합니다.Base64 Padding 도구
Base64 알파벳(Alphabet)
Base64 인코딩에 사용되는 64개 문자 집합. 표준 Base64 알파벳은: A-Z(26개), a-z(26개), 0-9(10개), +, / 총 64개 문자에 패딩 문자 =를 더한 것입니다.
btoa / atob
브라우저 네이티브 Base64 인코딩/디코딩 API. btoa(binary to ASCII)는 인코딩에, atob(ASCII to binary)는 디코딩에 사용됩니다. 이 API는 Latin-1 문자 세트만 지원한다는 점에 유의하세요. 한국어/중국어를 처리하려면 UTF-8 트랜스코딩과 함께 사용해야 합니다.
Data URI Scheme
작은 파일을 직접 URL에 내장할 수 있는 URI 형식으로, 형식은 data:[<mediatype>][;base64],<data>입니다. 작은 아이콘이나 CSS 배경 이미지 등을 내장하여 HTTP 요청을 줄이는 데 자주 사용됩니다.Data URI 도구Base64를 이미지로 변환
HTTP Basic Authentication
HTTP 프로토콜의 인증 방식 중 하나. 사용자 이름과 비밀번호를 콜론으로 연결하여 Base64 인코딩한 후 Authorization 요청 헤더에 넣어 전송합니다. 형식은 다음과 같습니다: Authorization: Basic <base64(username:password)>.Auth Header 빌더
Base64 볼륨 팽창률
Base64 인코딩 후 데이터 볼륨이 증가하는 비율. 3바이트(24비트)가 4개의 Base64 문자로 인코딩되므로 볼륨은 약 33% 증가합니다(4/3 ≈ 1.333). padding을 포함하면 팽창률이 약간 더 높아집니다.

Base64 세 가지 변형 비교

특성StandardURL-SafeMIME
특수 문자+ /- _+ /
Padding(=)사용일반적으로 생략사용
줄바꿈없음없음76자마다 줄바꿈
표준RFC 4648 §4RFC 4648 §5RFC 2045
주요 사용 사례Data URI, 범용 인코딩JWT, URL 매개변수, 파일명이메일 첨부파일, SMTP 전송

Base 시리즈 인코딩 비교표

인코딩 방식문자 수문자 세트 특징볼륨 팽창주요 용도
Base16 (Hex)160-9, A-F100%디버깅, 해시 표시
Base3232A-Z, 2-7(대문자로 혼동 방지)60%DNS, TOTP 키, QR 코드
Base5858혼동하기 쉬운 문자 0/O/I/l 제외38%비트코인 주소, 암호화폐
Base6262A-Z, a-z, 0-934%URL 단축, ID 인코딩
Base6464A-Z, a-z, 0-9, +, /33%Data URI, MIME, JWT(URL-Safe 변형)

Code Examples

JavaScript에서 Base64 인코딩(한국어 UTF-8 지원)

// 编码(支持 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 世界

Python에서 Base64 인코딩

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)

Java에서 Base64 인코딩

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));
    }
}

Authoritative References