Base64 디코드
무료 온라인 Base64 디코드 도구로 Base64 문자열을 원본 텍스트로 되돌립니다. 여러 문자셋을 지원하며 API 점검과 로그 복원에 유용합니다.
관련 추천
Base64 디코드란 무엇인가요?
Base64 디코드는 Base64 인코딩의 반대 과정으로, Base64 문자열(예: SGVsbG8=)을 원래 텍스트나 바이너리 데이터로 되돌립니다. Base64는 64개의 출력 가능한 ASCII 문자(A-Z, a-z, 0-9, +, /)로 바이너리 데이터를 표현하는 방식이며 RFC 4648에 정의되어 있습니다.
**주요 사용 사례:** Base64는 HTTP Basic Authentication 헤더, JWT 토큰의 payload 세그먼트, API 응답 필드, Data URI(`data:image/png;base64,...`), 메일 첨부용 MIME 인코딩, 데이터베이스 BLOB 저장 등에 널리 사용됩니다. 이런 데이터를 디코드하는 일은 개발과 디버깅에서 매우 흔합니다.
**디코드 시 핵심 포인트:** Base64를 디코드할 때는 1) 문자셋(한글/중국어 같은 멀티바이트 텍스트는 UTF-8, 단순 영문은 ASCII), 2) Padding(`=`) 처리와 길이 4의 배수 여부, 3) URL-safe 변형(`-`와 `_`가 `+`와 `/`를 대체), 4) 줄바꿈과 공백(표준 Base64에는 없고 MIME은 76자마다 줄바꿈) 처리가 중요합니다.
**브라우저 기본 지원:** 브라우저에는 Base64 디코드를 위한 `atob()` 함수가 있지만 Latin-1(ISO-8859-1)만 지원합니다. 한글 같은 멀티바이트 텍스트를 처리하려면 `TextDecoder('utf-8')`로 UTF-8 바이트를 해석해야 합니다. 이 도구는 그 과정을 자동으로 처리합니다.
**로컬 처리와 개인정보 보호:** 모든 디코드 작업은 브라우저 내부에서 이루어지며 입력한 Base64 문자열은 서버로 전송되지 않습니다. API 응답의 민감한 토큰이나 로그 속 사용자 데이터도 안심하고 확인할 수 있습니다.
사용 사례
- API가 반환한 Base64 필드를 디코드해 원본 내용을 확인
- 로그에 있는 Base64 인코딩 데이터를 복원
- 설정 파일의 Base64 값을 복구
- Padding 누락이나 잘못된 문자 같은 Base64 디코드 오류 원인 분석
- JWT 토큰의 header와 payload를 디코드해 사용자 정보 확인
- HTTP Basic Authentication 자격 증명을 디코드해 사용자 이름과 비밀번호 확인
- Data URI Scheme 안의 이미지 또는 리소스 데이터 복원
이용 방법
- 디코드할 Base64 문자열을 붙여 넣습니다
- 문자셋을 선택합니다 (UTF-8/ASCII/ISO-8859-1)
- 도구가 자동으로 Base64를 디코드해 결과를 표시합니다
- 디코드 결과를 복사해 디버깅이나 문서 기록에 사용합니다
주요 기능
- 실시간 양방향 변환: 입력하면 300ms 디바운스로 즉시 디코드되며 수동 실행이 필요 없습니다
- 다중 문자셋 지원: UTF-8, ASCII, ISO-8859-1로 한글, 영문, 다국어 환경 대응
- URL-safe Base64 호환: `-`와 `_` 치환을 자동 처리하고 no-padding 형식도 지원
- 잘못된 문자 감지: 디코드 실패 시 오류 위치를 알려 형식 문제를 빠르게 찾을 수 있습니다
- 원클릭 복사와 다운로드: 디코드 결과를 클립보드로 복사하거나 `.txt` 파일로 저장
- 자동 Padding 처리: `=` 문자를 자동으로 보완하거나 제거해 길이를 맞춰 줍니다
- MIME 변형 지원: 76자마다 줄바꿈된 MIME Base64 형식을 인식하고 처리합니다
코드 예제
JavaScript: 브라우저 `atob()`로 디코드 (Latin-1 전용)
javascript브라우저 기본 API로 영문 중심 Base64를 디코드할 수 있습니다. UTF-8 텍스트에는 `TextDecoder`가 필요합니다.
// Standard Base64 decode (plain English / Latin-1)
function b64Decode(str) {
try {
return atob(str);
} catch (e) {
return 'Decode failed: ' + e.message;
}
}
console.log(b64Decode('SGVsbG8gV29ybGQ=')); // "Hello World"
// UTF-8 decode (recommended)
function b64DecodeUtf8(str) {
const binary = atob(str);
const bytes = new Uint8Array(binary.length);
for (let i = 0; i < binary.length; i++) {
bytes[i] = binary.charCodeAt(i);
}
return new TextDecoder('utf-8').decode(bytes);
}
console.log(b64DecodeUtf8('5LiW55WM')); // UTF-8 textPython: `base64` 라이브러리로 디코드 (URL-Safe 포함)
pythonPython 표준 `base64` 라이브러리는 Standard와 URL-Safe 두 모드를 모두 지원합니다.
import base64
# Standard decode
encoded = 'SGVsbG8g5LiW55WM'
decoded = base64.b64decode(encoded).decode('utf-8')
print(decoded)
# URL-Safe decode
url_encoded = 'SGVsbG8g5LiW55WM'
decoded = base64.urlsafe_b64decode(url_encoded + '=' * (4 - len(url_encoded) % 4))
print(decoded.decode('utf-8'))
# MIME decode (after removing line breaks)
mime_encoded = 'SGVs\nbG8g\nV29y\nbGQ='
decoded = base64.b64decode(mime_encoded.replace('\n', '')).decode('utf-8')
print(decoded)
# Ignore invalid characters automatically
import re
cleaned = re.sub(r'[^A-Za-z0-9+/=]', '', encoded)
decoded = base64.b64decode(cleaned).decode('utf-8')
print(decoded)Java: `java.util.Base64`로 디코드 (여러 변형 지원)
javaJava 표준 라이브러리는 RFC 4648, URL-Safe, MIME Base64를 모두 지원합니다.
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class Base64DecodeExample {
public static void main(String[] args) {
String encoded = "SGVsbG8g5LiW55WM";
// Standard decode
byte[] decoded = Base64.getDecoder().decode(encoded);
System.out.println(new String(decoded, StandardCharsets.UTF_8));
// URL-Safe decode
byte[] urlDecoded = Base64.getUrlDecoder().decode(encoded);
System.out.println(new String(urlDecoded, StandardCharsets.UTF_8));
// MIME decode (handles line breaks automatically)
String mime = "SGVs\nbG8g\nV29y\nbGQ=";
byte[] mimeDecoded = Base64.getMimeDecoder().decode(mime);
System.out.println(new String(mimeDecoded, StandardCharsets.UTF_8));
// Error handling
try {
Base64.getDecoder().decode("invalid@base64");
} catch (IllegalArgumentException e) {
System.err.println("Decode failed: " + e.getMessage());
}
}
}자주 묻는 질문
왜 Base64 디코드 시 InvalidCharacterError가 발생하나요?
공백, 줄바꿈, 따옴표 같은 잘못된 문자가 섞였거나 Padding(`=`) 개수가 맞지 않거나 URL-safe 변형(`-/_`)을 그대로 표준 Base64처럼 처리했을 때 자주 발생합니다. 먼저 문자열을 정리한 뒤 다시 디코드해 보세요.
디코드 후 글자가 깨져 보이면 어떻게 하나요?
문자셋 선택이 잘못되었을 가능성이 큽니다. 한글이나 다른 멀티바이트 텍스트라면 UTF-8을 선택하세요. 순수 영문이나 바이너리라면 ASCII 또는 ISO-8859-1을 시도할 수 있습니다.
URL-safe Base64와 일반 Base64 디코드는 무엇이 다른가요?
URL-safe Base64는 `+`와 `/` 대신 `-`와 `_`를 사용하고 끝의 Padding `=`를 생략하는 경우가 많습니다. 디코드 전에 `-/_`를 `+/`로 되돌리고 필요한 Padding을 채워야 합니다.
Base64 디코드는 API 연동 디버깅에 적합한가요?
매우 적합합니다. 많은 API 응답, OAuth 토큰, 콜백 파라미터, 미들웨어 로그가 내용을 Base64로 감싸기 때문에 디코드하면 원본 데이터를 바로 확인할 수 있습니다.
JWT의 header나 payload는 어떻게 디코드하나요?
JWT는 Base64URL(URL-safe 변형)을 사용합니다. JWT의 첫 번째 세그먼트(header) 또는 두 번째 세그먼트(payload)를 붙여 넣고 URL-safe 모드를 선택하세요. 세 번째 세그먼트는 서명이며 일반 디코드로 검증하는 대상이 아닙니다.
큰 파일도 디코드할 수 있나요?
명시적인 크기 제한은 없지만 매우 큰 텍스트에서는 브라우저 성능이 떨어질 수 있습니다. 10MB를 넘는 Base64 문자열은 페이지를 느리게 만들 수 있으므로 분할 처리나 Node.js / Python 스크립트를 권장합니다.
Padding이 빠져 있으면 어떻게 되나요?
도구가 자동으로 Padding(`=`)을 보완해 길이를 4의 배수로 맞춥니다. URL-safe 변형에서 padding이 자주 생략되므로 이를 자동으로 인식해 채워 줍니다.
Base64 디코드는 복호화인가요?
아닙니다. Base64는 되돌릴 수 있는 인코딩이지 암호화가 아닙니다. 누구나 Base64를 디코드할 수 있으므로 민감한 데이터에는 AES 같은 실제 암호화를 사용해야 합니다.
브라우저 `atob()`와 이 도구의 결과는 같은가요?
순수 영문 텍스트라면 대체로 같습니다. 하지만 `atob()`는 Latin-1만 지원해 UTF-8 멀티바이트 텍스트를 직접 처리하지 못합니다. 이 도구는 `atob()`와 `TextDecoder`를 결합한 것과 같은 처리를 제공합니다.
디코드 결과를 내보낼 수 있나요?
네. 한 번에 클립보드로 복사하거나 `.txt` 파일로 다운로드할 수 있습니다. 내려받은 파일은 UTF-8 인코딩이므로 어떤 텍스트 편집기나 Excel에서도 열 수 있습니다.
용어집
- Base64
- 64개의 출력 가능한 ASCII 문자를 사용하는 바이너리-텍스트 인코딩 방식으로 RFC 4648에 정의되어 있습니다. 3바이트를 4문자로 바꾸므로 크기가 약 33% 증가합니다.
- atob()
- 브라우저 기본 Base64 디코드 함수(ASCII to Binary)입니다. Latin-1만 지원하므로 UTF-8 텍스트에는 TextDecoder를 함께 써야 합니다.
- Padding
- Base64 끝에 `=` 문자를 붙여 길이를 4의 배수로 맞추는 방식입니다. 디코드 시에는 보통 자동 처리되며 URL-safe 변형에서는 자주 생략됩니다.
- URL-Safe Base64
- RFC 4648 §5에 정의된 URL 안전 변형으로 `+`와 `/` 대신 `-`와 `_`를 사용합니다. JWT와 OAuth PKCE에서 자주 사용됩니다.
- MIME Base64
- RFC 2045에 따라 76자마다 CRLF 줄바꿈을 넣는 Base64 변형으로 주로 이메일 첨부 파일 전송에 사용됩니다.
- UTF-8
- 가변 길이 Unicode 인코딩입니다. 한글 같은 멀티바이트 문자를 정확히 복원하려면 Base64 디코드 시 UTF-8을 선택해야 합니다.
- InvalidCharacterError
- 브라우저 `atob()`가 공백, 줄바꿈, 비 Base64 문자를 만나면 던지는 오류입니다. 입력에 잘못된 문자가 섞였다는 뜻입니다.
- Latin-1 (ISO-8859-1)
- 서유럽 언어용 단일 바이트 문자셋입니다. 브라우저의 `atob`와 `btoa`는 이 문자셋만 직접 지원합니다.
Base64 세 가지 변형 비교
디코드 전에 입력 Base64의 변형을 먼저 확인하고 알맞은 모드를 선택하면 오류나 깨진 출력을 줄일 수 있습니다.
| 특징 | Standard | URL-Safe | MIME |
|---|---|---|---|
| 특수 문자 | + / | - _ | + / |
| Padding (=) | 사용 | 보통 생략 | 사용 |
| 줄바꿈 | 없음 | 없음 | 76자마다 줄바꿈 |
| 표준 | RFC 4648 §4 | RFC 4648 §5 | RFC 2045 |
| 대표 시나리오 | Data URI, 일반 인코딩 | JWT, URL 파라미터, 파일명 | 메일 첨부, SMTP 전송 |
| 디코드 주의점 | Padding을 보완해야 할 수 있음 | 먼저 -_를 +/로 바꾼 뒤 디코드 | 줄바꿈을 제거한 뒤 디코드 |
Base64 디코드에서 흔한 5가지 오류
디코드 오류가 발생하면 아래 표로 원인을 빠르게 좁힐 수 있습니다.
| 오류 유형 | 가능한 원인 | 해결 방법 |
|---|---|---|
| InvalidCharacterError | 공백, 줄바꿈, 또는 Base64가 아닌 문자가 포함됨 | 입력 문자열을 정리하거나 Base64 Clean 도구를 사용 |
| 디코드 후 문자 깨짐 | 잘못된 문자셋 선택, 예: UTF-8 텍스트를 Latin-1로 읽음 | UTF-8로 전환 |
| URL 파라미터에서 오류 | URL-safe 문자(`-_`)를 표준 Base64로 디코드함 | 먼저 `-_`를 `+/`로 바꿈 |
| Padding 오류 | 길이가 4의 배수가 아님 | 길이 % 4 = 0이 될 때까지 `=` 추가 |
| 빈 문자열 | 입력이 공백이나 줄바꿈만 포함함 | 공백을 제거하고 다시 입력 |
Authoritative References
- 텍스트 비교
- 바이너리 변환
- 시저 암호
- 모스 부호
- 16진수 변환
- 비디오를 Base64로 변환
- Base64를 동영상으로 변환
- 이미지를 Base64로 변환
- Base64 이미지 변환
- 텍스트를 Base64로 변환
- Base64 텍스트로 변환
- 파일 해시 검증
- File to Base64
- Base64 파일로 변환
- 오디오 → Base64
- Base64를 오디오로 변환
- AES 암호화 및 복호화
- DES 암호화/복호화
- Base32 인코더 디코더
- Base58 인코딩 및 디코딩
- Base64 인코딩
- Base64 디코드
- Base64 비교
- Base64 분할
- Base64 여러 줄 병합
- Base64 형식화
- Base64 형식 검사
- Base64 일괄 인코딩
- Base64 일괄 디코딩
- Base64 정리
- Base64 패딩 처리
- Base64 길이 통계
- Base64 16진수로 변환
- Base64 DataURL 변환
- Base64-Hex 양방향 변환
- Base85 인코딩/디코딩
- HMAC 생성 및 검증
- PBKDF2 키 파생
- MD5 해시값
- SHA-256 해시
- SHA1 해시
- SHA512 해시
- JWT 도구
- HTML 엔티티 인코딩/디코딩
- Unicode 이스케이프
- URL 인코딩
- URL Safe Base64
- MIME Base64
- Java 난독화
- JS 난독화
- PHP 난독화
- Python 난독화