총 54개 서포트 유틸리티
100% 브라우저 자체 연산 (서버 전송 없음)
Zero Latency 실시간 결과
완전 프라이빗 개인정보 보호
개발자 및 데이터 Client Local

Base64 인코더 / 디코더

텍스트, JSON 데이터, 이미지 및 바이너리 파일을 웹 표준 Base64 및 URL-Safe Base64 형식으로 상호 변환해 주는 개발자용 데이터 유틸리티입니다. UTF-8 한글 문자열 완벽 지원, 드래그 앤 드롭 대용량 파일 변환, 패딩(=) 제거 옵션, Data URL 포맷 자동 구성 및 디코딩 이미지 실시간 미리보기를 서버 전송 없이 브라우저 메모리 안에서 처리합니다.

입력 (Input)
샘플 데이터 불러오기:
0 글자0 바이트용량 변화: -
출력 결과 (Output)
Base64 output will appear here...

인코딩 & 포맷팅 옵션 (Options)

Base64 핵심 수치 요약

용량 증가율: 8비트 바이너리를 6비트 아스키 문자로 변환하므로 데이터 크기가 정확히 33.3% (4/3배) 증가합니다.

문자 집합: 영문 대문자(A-Z 26개), 소문자(a-z 26개), 숫자(0-9 10개), 특수문자(+ / 2개) 총 64개 문자와 패딩(=)을 사용합니다.

암호화가 아님: Base64는 데이터 전송 안정성을 위한 인코딩(Encoding) 방식일 뿐이며 누구나 복호화할 수 있으므로 보안용 암호화로 사용해서는 안 됩니다.

입력하신 텍스트, 비밀번호, JSON 데이터, 업로드한 파일은 외부 서버로 전송되지 않으며 사용자의 브라우저 Web Crypto / FileReader 메모리 안에서만 처리됩니다.

데이터 인코딩 & 웹 표준 기술 명세

Base64 인코딩의 수학적 변환 원리와 웹 표준 활용 및 보안 분석

Base64는 컴퓨터 과학 및 네트워크 통신에서 8비트 이진 데이터(바이너리 파일, 이미지, 실행 파일, 압축 파일 등)를 시스템 간 전송 시 손실 없이 안전하게 교환하기 위해, 64개의 출력 가능한 ASCII(아스키) 문자 조합으로 변환하는 표준 이진-텍스트 인코딩(Binary-to-Text Encoding) 스키마입니다.

초기 이메일 전송 프로토콜(SMTP)이나 구형 네트워크 장비들은 7비트 ASCII 문자만을 안전하게 전달하도록 설계되어, 8비트 최상위 비트(MSB)가 1인 한글/유니코드 문자나 바이너리 파일 전송 시 데이터가 손상되는 문제가 있었습니다. Base64는 이 문제를 완벽하게 해결하며 현대 웹의 필수 인프라 기술로 자리 잡았습니다.

본 설명에서는 Base64의 수학적 6비트 분할 및 패딩(=) 계산 알고리즘부터 URL-Safe Base64(RFC 4648)의 차이점, Data URL 최적화 기법, 6대 진법 인코딩 비교표, 주요 프로그래밍 언어별 구현 코드, 그리고 보안 주의사항을 상세히 분석합니다.

UTF-8 다국어 및 한글 완벽 인코딩

자바스크립트 btoa/atob의 라틴1 한계를 극복하고 UTF-8 멀티바이트 한글을 깨짐 없이 정확하게 변환합니다.

대용량 파일 드래그 앤 드롭 즉시 처리

FileReader API를 통해 이미지, PDF, ZIP 등 최대 50MB 바이너리 파일을 브라우저 메모리에서 즉각 Base64로 추출합니다.

URL-Safe & MIME 76자 줄바꿈 지원

웹 URL 쿼리스트링, JWT 토큰, 이메일 MIME 프로토콜 표준에 맞춘 다양한 포맷팅 옵션을 제공합니다.

디코딩 미디어 실시간 뷰어 & 원클릭 다운로드

디코딩된 Base64 이미지를 브라우저 화면에서 즉시 확인하고 원본 바이너리 파일로 저장할 수 있습니다.

1. Base64의 수학적 변환 원리와 3바이트 → 4문자 매핑 공식

비트(Bit) 분할 메커니즘 (8비트×3=24비트=6비트×48\text{비트} \times 3 = 24\text{비트} = 6\text{비트} \times 4):
- 컴퓨터의 일반 바이트는 8비트(28=2562^8 = 256가지 값)로 구성되어 있습니다.
- Base64는 64개의 문자(26=642^6 = 64)만을 사용하므로, 6비트 단위로 데이터를 읽어 들입니다.
- 따라서 연속된 3바이트(24비트)의 바이너리 데이터6비트씩 4개로 쪼개어 Base64 색인표(Index Table: 0A,1B,,63/0 \to A, 1 \to B, \dots, 63 \to /)의 문자로 변환합니다.
패딩(Padding, =) 생성 규칙:
- 입력 데이터의 전체 바이트 수가 3의 배수가 아닐 때 끝부분을 맞추기 위해 패딩 문자 =를 덧붙입니다.
- 남은 데이터가 1바이트(8비트)일 때: 6비트 1개 + 2비트(뒤에 0000 패딩) 1개로 변환된 후, 나머지 2자리는 ==로 채워 총 4글자를 맞춥니다.
- 남은 데이터가 2바이트(16비트)일 때: 6비트 2개 + 4비트(뒤에 00 패딩) 1개로 변환된 후, 나머지 1자리는 =로 채워 총 4글자를 맞춥니다.
용량 팽창 비율 공식 (+33.3%+33.3\%):
- 원본 데이터 크기가 NN 바이트일 때, Base64로 인코딩된 문자열의 최종 길이는 다음과 같습니다.
- Base64 길이=4×N3=4N31.333N\text{Base64 길이} = 4 \times \left\lceil \frac{N}{3} \right\rceil = \frac{4N}{3} \approx 1.333 N

2. 주요 진법 기반 바이너리-텍스트 인코딩 방식 비교 명세표

데이터 전송 목적, 블록체인 주소, URL 안전성에 따라 다양한 진법 인코딩이 활용됩니다.

인코딩 방식문자 집합 크기주요 문자 구성용량 증가율주요 활용처 및 특징
Base64 (표준)64개 문자 + =A-Z, a-z, 0-9, +, /+33.3% (4/3배)이메일(MIME), Data URL, 파일 임베딩, 기본 웹 표준
Base64URL (RFC 4648)64개 문자 (패딩 생략 가능)A-Z, a-z, 0-9, -, _+33.3% (4/3배)JWT(JSON Web Token), URL 쿼리 파라미터, 쿠키
Base16 (HEX / 16진수)16개 문자0-9, a-f (또는 A-F)+100% (2배)해시값(SHA-256, MD5), 메모리 덤프, 색상 코드(#RGB)
Base32 (RFC 4648)32개 문자 + =A-Z, 2-7 (혼동 문자 배제)+60% (8/5배)OTP 인증(Google Authenticator 시크릿 키), DNSSEC
Base5858개 문자0, O, I, l 등 혼동 문자 6개 제거+37% 내외비트코인(Bitcoin) 지갑 주소, IPFS 해시, 탈중앙화 식별자
Base85 (Ascii85)85개 문자출력 가능한 아스키 인쇄 문자+25% (5/4배)Adobe PostScript, PDF 파일 내부 폰트/스트림 압축

3. 웹 개발에서의 핵심 활용 사례와 Data URL 최적화

Data URL(data:[<mediatype>][;base64],<data>)을 통한 HTTP 요청 최소화:
- 작은 아이콘이나 1KB 미만의 SVG/PNG 이미지를 HTML이나 CSS 내에 background-image: url("data:image/png;base64,..."); 형태로 직접 삽입하면 별도의 HTTP 네트워크 요청(Round Trip Time)을 줄일 수 있어 첫 화면 렌더링 속도(FCP)가 빨라집니다.
- 단, 10KB 이상의 큰 파일은 33% 용량 증가로 인해 HTML 번들 용량을 과도하게 키우고 브라우저 캐싱을 무력화하므로 별도 이미지 파일로 분리하는 것이 좋습니다.
JWT(JSON Web Token)와 Base64URL:
- 웹 인증 토큰인 JWT는 Header.Payload.Signature의 3개 영역이 각각 Base64URL로 인코딩되어 점(.)으로 연결됩니다.
- URL에서 특별한 의미를 갖는 +, /, = 기호가 -, _로 치환되어 있어 HTTP 헤더(Authorization: Bearer <token>)와 URL 파라미터로 안전하게 전송됩니다.
Basic HTTP Authentication 인증 헤더:
- HTTP 기본 인증은 username:password 문자열을 Base64로 인코딩하여 Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ= 형태로 서버에 전달합니다.

4. 보안 경고: Base64는 암호화(Encryption)가 아닙니다

인코딩(Encoding)과 암호화(Encryption)의 근본적 차이:
- 인코딩: 컴퓨터 시스템 간의 원활한 데이터 교환 및 형식 변환을 위한 공개된 표준 규칙이며, 비밀 키(Key) 없이 누구나 원본으로 복원할 수 있습니다.
- 암호화(AES, RSA 등): 올바른 복호화 키를 가진 인가된 사용자만이 데이터를 해독할 수 있도록 수학적으로 난독화하는 보안 기법입니다.
실무 보안 권고:
- 데이터베이스 비밀번호, 개인정보(주민번호, 카드번호), 민감 API 토큰을 단순 Base64로만 감싸서 저장하거나 전송하는 행위는 평문(Plaintext)으로 노출하는 것과 동일하므로 반드시 강력한 대칭키/비대칭키 암호화(AES-256-GCM 등) 또는 해시(bcrypt, Argon2)를 적용해야 합니다.

주요 프로그래밍 언어별 Base64 인코딩 / 디코딩 소스 코드

백엔드 서버, 프론트엔드 웹 앱, 터미널 CLI 환경에서 즉시 사용할 수 있는 실전 예제입니다.

JavaScript / TypeScript (Web & Node.js)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 1. 브라우저 환경 (UTF-8 다국어 완벽 지원)
function utf8ToBase64(str: string): string {
const bytes = new TextEncoder().encode(str);
const binString = Array.from(bytes, (byte) => String.fromCharCode(byte)).join('');
return btoa(binString);
}
 
function base64ToUtf8(base64: string): string {
const binString = atob(base64);
const bytes = Uint8Array.from(binString, (m) => m.charCodeAt(0));
return new TextDecoder().decode(bytes);
}
 
// 2. Node.js Buffer 활용
const encoded = Buffer.from("안녕하세요 Hello", "utf-8").toString("base64");
const decoded = Buffer.from(encoded, "base64").toString("utf-8");
Python 3
1
2
3
4
5
6
7
8
9
10
11
12
13
import base64
 
# 문자열 인코딩 및 디코딩
text = "안녕하세요 Hello"
encoded_bytes = base64.b64encode(text.encode('utf-8'))
encoded_str = encoded_bytes.decode('utf-8')
print("Base64:", encoded_str)
 
decoded_str = base64.b64decode(encoded_str).decode('utf-8')
print("Decoded:", decoded_str)
 
# URL-Safe Base64
url_safe = base64.urlsafe_b64encode(text.encode('utf-8')).decode('utf-8')
Java (java.util.Base64)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.util.Base64;
import java.nio.charset.StandardCharsets;
 
public class Base64Example {
public static void main(String[] args) {
String text = "안녕하세요 Hello";
// 1. Standard Base64
String encoded = Base64.getEncoder().encodeToString(text.getBytes(StandardCharsets.UTF_8));
byte[] decodedBytes = Base64.getDecoder().decode(encoded);
String decoded = new String(decodedBytes, StandardCharsets.UTF_8);
// 2. URL-Safe Base64 (RFC 4648)
String urlSafe = Base64.getUrlEncoder().encodeToString(text.getBytes(StandardCharsets.UTF_8));
}
}
Go (Golang)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package main
 
import (
"encoding/base64"
"fmt"
)
 
func main() {
text := "안녕하세요 Hello"
// Standard Base64
encoded := base64.StdEncoding.EncodeToString([]byte(text))
fmt.Println("Encoded:", encoded)
decodedBytes, _ := base64.StdEncoding.DecodeString(encoded)
fmt.Println("Decoded:", string(decodedBytes))
// URL-Safe Base64
urlSafe := base64.URLEncoding.EncodeToString([]byte(text))
fmt.Println("URL-Safe:", urlSafe)
}
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$text = "안녕하세요 Hello";
 
// Base64 인코딩
$encoded = base64_encode($text);
echo "Encoded: " . $encoded . "
";
 
// Base64 디코딩
$decoded = base64_decode($encoded);
echo "Decoded: " . $decoded . "
";
 
// URL-Safe Base64 변환
$urlSafe = str_replace(['+', '/', '='], ['-', '_', ''], $encoded);
?>
C# / .NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System;
using System.Text;
 
class Program {
static void Main() {
string text = "안녕하세요 Hello";
// Base64 Encode
byte[] textBytes = Encoding.UTF8.GetBytes(text);
string encoded = Convert.ToBase64String(textBytes);
// Base64 Decode
byte[] decodedBytes = Convert.FromBase64String(encoded);
string decoded = Encoding.UTF8.GetString(decodedBytes);
}
}
Terminal / Bash CLI
1
2
3
4
5
6
7
8
9
# 문자열 인코딩
echo -n "안녕하세요 Hello" | base64
 
# 문자열 디코딩
echo "7JWI64WV7ZWY7IS47JqTIEhlbGxv" | base64 -d
 
# 파일 인코딩 및 파일 디코딩
base64 -w 0 input.png > image_base64.txt
base64 -d image_base64.txt > output.png

DEVELOPER & DATA UTILITY FAQ

Q.Base64 인코딩을 하면 원본 데이터보다 용량이 얼마나 늘어나나요?

정확히 33.3% (4/3배) 증가합니다. Base64는 8비트 바이너리 3바이트(24비트)를 6비트 아스키 문자 4개(32비트)로 표현하기 때문에, 3바이트의 데이터가 항상 4바이트의 문자열로 팽창합니다.

Q.표준 Base64와 URL-Safe Base64의 차이점은 무엇인가요?

표준 Base64는 +/ 문자를 사용하는데, 이 문자들은 URL 쿼리스트링이나 쿠키, 파일 경로에서 공백(Space)이나 디렉터리 구분자로 잘못 파싱될 위험이 있습니다. URL-Safe Base64(RFC 4648)는 +-(하이픈)으로, /_(언더스코어)로 바꾸고 끝부분의 패딩(=)을 생략하여 웹 URL이나 JWT 토큰에서 안전하게 사용할 수 있도록 만든 규격입니다.

Q.문자열 끝에 붙어 있는 등호(=, ==) 기호는 무엇인가요?

패딩(Padding) 문자입니다. Base64는 입력 데이터를 3바이트(24비트) 묶음 단위로 처리하는데, 원본 데이터의 전체 바이트 수가 3으로 나누어떨어지지 않을 때 마지막 4글자 블록의 빈자리를 채우기 위해 1개(=) 또는 2개(==)의 등호를 덧붙여 전체 문자열 길이를 항상 4의 배수로 맞춥니다.

Q.한글을 인코딩할 때 자바스크립트 btoa() 함수에서 오류가 발생하는 이유는 무엇인가요?

자바스크립트 내장 함수 btoa()는 레거시 1바이트 라틴1(Latin1 / ASCII, 코드값 0~255) 문자열만을 지원하기 때문입니다. UTF-8로 인코딩된 2~3바이트 한글이나 이모지가 전달되면 InvalidCharacterError가 발생합니다. 본 도구는 최신 TextEncoderUint8Array를 활용하여 모든 다국어와 유니코드를 오류 없이 완벽하게 변환합니다.

Q.Base64로 이미지를 HTML/CSS에 직접 넣는(Data URL) 것은 항상 좋은가요?

1KB~2KB 미만의 작은 아이콘, 로고, 파비콘 등은 추가적인 HTTP 네트워크 왕복(Round-Trip)을 없애 페이지 로딩 속도를 개선하는 데 효과적입니다. 하지만 10KB가 넘는 큰 이미지는 33% 용량 증가로 인해 HTML/CSS 번들 파일이 비대해지고 브라우저 캐싱 이점을 잃게 되므로 별도의 이미지 파일(WebP, AVIF)로 호스팅하는 것이 유리합니다.

Q.Base64로 비밀번호나 주민등록번호를 숨겨두면 안전한가요?

안전하지 않습니다. Base64는 암호화(Encryption)가 아닌 단순 표현 방식(Encoding)입니다. 별도의 복호화 키나 비밀번호 없이 누구나 클릭 한 번으로 원본을 해독할 수 있으므로, 민감한 개인정보는 반드시 AES-256과 같은 암호화 알고리즘이나 bcrypt와 같은 단방향 해시를 사용해야 합니다.

Q.Base64 디코딩 시 이미지가 정상적으로 복원되었는지 어떻게 확인하나요?

디코딩 모드에서 이미지 형식의 Base64(예: data:image/png;base64,... 또는 순수 이미지 Base64 문자열)를 입력하면, 본 도구 하단에 실시간 이미지 미리보기 캔버스가 자동으로 나타나며 원본 이미지 파일(.png, .jpg 등)로 다운로드할 수 있는 버튼이 활성화됩니다.

Q.업로드한 대용량 파일이나 민감한 텍스트가 서버로 전송되나요?

전송되지 않습니다. 모든 Base64 인코딩, 디코딩, 파일 파싱 및 이미지 렌더링 연산은 사용자의 브라우저 클라이언트 메모리(Web APIs)에서만 로컬로 수행됩니다.