파일 업로드
  1. base64hub
  2. 텍스트 도구
  3. Base64 디코더

Base64 디코딩: 온라인에서 Base64를 텍스트로 변환

Base64 문자열을 붙여넣으면 디코딩된 텍스트를 바로 읽을 수 있습니다. 줄 바꿈, data: 접두사, URL-safe 문자, 빠진 = 패딩은 알아서 처리하며, 오류가 나면 정확히 어느 문자인지 알려 줍니다.

무료 가입 없음, 제한 없음 로컬 업로드 없음 자동 PNG, PDF, ZIP, JSON 등 감지 업데이트 2026. 10. 27.
입력 0 B출력 0 B크기 –

브라우저에서 처리됩니다. 이 페이지는 데이터를 어디로도 보낼 수 없습니다 – 확인 방법

Base64를 디코딩하는 방법

  1. 입력 · Base64 상자에 Base64를 붙여넣으세요. 줄 바꿈, 공백, 앞뒤의 따옴표, data:...;base64, 접두사는 그대로 두어도 디코더가 제거합니다.
  2. 출력 · 텍스트에 디코딩된 텍스트가 나타납니다. 상태 표시줄에 올바른 Base64 여부, 변형(Standard 또는 Base64URL), 디코딩된 바이트 수, 그리고 추정 형식 항목에 감지된 내용 유형이 표시됩니다.
  3. 글자가 깨지면 문자 인코딩을 바꾸거나 자동 감지를 고르세요.
  4. 내용이 JSON이면 JSON 보기 좋게 정렬로 읽기 좋게 들여쓰기할 수 있습니다.
  5. 출력 복사를 누르거나, 다운로드로 디코딩된 바이트를 파일로 저장하세요. 확장자는 감지된 유형을 따르므로 JSON은 decoded.json, PNG는 decoded.png로 저장됩니다.

바꾸기는 디코딩된 텍스트를 입력으로 되돌리고 인코딩으로 전환합니다. 문자열이 왕복 변환되는지 빠르게 확인할 수 있습니다.

디코더가 받는 입력

Base64가 깔끔한 상태로 오는 일은 드뭅니다. 이메일에서는 76자마다 줄 바꿈되어, JSON 파일에서는 따옴표에 싸여, URL에서는 퍼센트 인코딩되어, 토큰에서는 패딩 없이 옵니다. 디코더는 아무 설정 없이 이 모두를 받습니다.

붙여넣은 값결과일어난 일
SGVsbG8gV29ybGQHello World빠진 =를 복원하고 상태 표시줄에 알림
8J-Riw👋URL-safe -와 _를 인식하고 변형을 Base64URL로 표시
data:text/plain;base64,SGk=Hidata URI 접두사 제거
"SGVsbG8="Hello코드나 JSON의 따옴표 제거
SGVsbG8%3DHelloURL 인코딩된 %3D를 =로 읽음
SGVs (줄 바꿈) bG8=Hello줄 바꿈과 공백 건너뜀

디코더는 이런 포장에는 관대하지만 그 밖의 것에는 엄격해서, 알파벳 밖의 문자가 나오면 그 문자와 위치를 알려 주는 오류와 함께 멈춥니다. 반면 일부 라이브러리는 잘못된 문자를 조용히 건너뛰고 손상된 출력을 내놓습니다(아래 코드 섹션 참고).

URL-safe 토큰이라면 Base64URL 디코더에서 알파벳을, Base64와 Base64URL 비교에서 차이를 설명합니다.

디코딩한 Base64가 파일일 때

Base64는 어떤 바이트든 담을 수 있으므로, Base64 문자열 중에는 이미지나 문서가 많습니다. 도구는 디코딩한 데이터의 첫 바이트를 알려진 파일 시그니처(매직 넘버)와 대조해 추정 형식에 결과를 보여 줍니다. PNG, JPEG, PDF, ZIP, gzip, JSON, XML 등 많은 형식을 알아봅니다. 바이너리 형식이면 출력 가능한 미리보기를 보여 주고, 바이너리 데이터라고 알린 뒤 Base64를 이미지로나 Base64를 PDF로 같은 알맞은 도구로 연결합니다. 어느 경우든 다운로드는 원래 바이트를 저장합니다.

디코딩하기 전에 Base64 문자열의 시작 부분만 봐도 형식을 알 수 있는 경우가 많습니다.

Base64 시작 부분디코딩된 바이트형식
iVBORw0KGgo89 50 4E 47 0D 0A 1A 0APNG 이미지
/9j/FF D8 FFJPEG 이미지
JVBERi0%PDF-PDF 문서
UEsDBAPK 03 04ZIP, DOCX와 XLSX도 해당
H4sI1F 8B 08gzip 데이터(Gzip Base64 디코더)
eyJ{"JSON, JWT 세그먼트인 경우가 많음
PD94bWwg<?xmlXML

더 많은 시그니처는 자주 보는 Base64 접두사에 정리되어 있습니다. 유형을 모르는 파일이라면 Base64 파일 변환이 형식을 감지하고 미리 보여 줍니다.

문자 인코딩: 깨진 글자 고치기

Base64는 바이트를 저장할 뿐, 어떤 문자 인코딩이 문자를 그 바이트로 바꿨는지는 알려 주지 않습니다. 디코더는 대부분의 최신 데이터에 맞는 UTF-8로 가정합니다. 이 가정이 틀리면 알아볼 수 있는 증상이 나타납니다.

  • � 문자와 “일부 바이트가 올바른 UTF-8이 아닙니다” 안내. 텍스트가 레거시 문자 인코딩에서 왔습니다. Y2Fm6Q==는 UTF-8에서 caf�, ISO-8859-1이나 Windows-1252에서 café로 읽힙니다. 한국어 레거시 시스템의 데이터라면 EUC-KR이 필요합니다. vsiz58fPvLy/5A==는 EUC-KR로 읽어야 안녕하세요가 됩니다. z/Do4uXy 같은 러시아어 텍스트는 Windows-1251이어야 Привет가 나옵니다.
  • 글자마다 뒤에 점이나 빈칸이 붙음. UTF-16입니다. ASCII 글자 뒤에 0 바이트가 하나씩 붙기 때문입니다. SABlAGwAbABvAA==는 UTF-16LE로 Hello입니다(Base64를 UTF-16으로).
  • 출력에 é, ü, ’가 보임. 디코딩은 올바릅니다. Base64로 바꾸기 전에 텍스트가 이중 인코딩된 것으로, 앞선 어느 단계에서 UTF-8을 Latin-1로 잘못 읽고 그 결과를 다시 UTF-8로 저장했기 때문입니다. Y2Fmw4PCqQ==는 정확히 café로 디코딩됩니다. 원본에서 고치세요.

자동 감지는 바이트 순서 표시를 먼저 찾고, 다음으로 바이트가 올바른 UTF-8인지, 그다음 UTF-16의 0 바이트 패턴이 있는지 확인합니다. EUC-KR, Windows-1251, KOI8-R 같은 레거시 문자 인코딩은 어떤 감지기로도 서로 구별하기 어려우므로, 출처를 안다면 직접 고르세요.

오류 메시지와 그 의미

메시지흔한 원인해결 방법
잘못된 문자 “."(위치 21)JWT 전체를 붙여넣음: 점이 세 세그먼트를 구분세그먼트 하나만 디코딩하거나 JWT 디코더 사용
잘못된 문자 "\\"(위치 8)/가 \/로 이스케이프된 JSON에서 Base64를 복사함\/를 /로 바꾸기
입력에 표준(+ /) 문자와 URL-safe(- _) 문자가 섞여 있습니다두 문자열이 합쳐졌거나 변환이 반쯤만 됨Base64URL을 Base64로로 한 가지 알파벳으로 변환
패딩(=)은 맨 끝에만 올 수 있습니다SGk=SGk=처럼 Base64 값 두 개가 붙어 있음나눠서 각각 디코딩
길이가 잘못되었습니다. 문자가 하나 많거나 적습니다복사하면서 문자가 빠지거나 더해짐다시 복사하거나 Base64 복구 시도

Base64 오류 가이드에서 각 경우를 더 깊이 다룹니다. 문자열에서 정확히 어느 문자나 패딩이 문제인지 찾으려면 Base64 검사기를 사용하세요.

JavaScript, Python, 명령줄에서 Base64 디코딩

atob()는 바이트 하나당 문자 하나인 “바이너리 문자열"을 돌려주므로 UTF-8 텍스트에는 TextDecoder 단계가 필요합니다. atob는 빠진 패딩은 받아 주지만 URL-safe -와 _에서는 InvalidCharacterError를 던집니다.

const s = "R3LDvMOfZSDwn5GL";
new TextDecoder().decode(Uint8Array.from(atob(s), c => c.charCodeAt(0)));
// "Grüße 👋"

// Node.js accepts both alphabets
Buffer.from(s, "base64").toString("utf8");          // "Grüße 👋"
Buffer.from("8J-Riw", "base64url").toString("utf8"); // "👋"

Python은 패딩이 없는 입력에서 binascii.Error: Incorrect padding을 발생시키므로 패딩을 직접 붙이세요.

import base64

s = "SGVsbG8"
base64.b64decode(s + "=" * (-len(s) % 4)).decode("utf-8")
# 'Hello'
base64.b64decode("SGVs*bG8=", validate=True)
# binascii.Error: Only base64 data is allowed

validate=True가 없으면 Python은 *를 버리고 b'Hello'를 돌려줍니다. Node의 Buffer.from도 마찬가지여서, 손상된 문자열이 아무 오류 없이 디코딩될 수 있습니다.

명령줄에서는 다음과 같습니다.

printf '%s' 'R3LDvMOfZSDwn5GL' | base64 -d
base64 -d message.b64 > message.bin

첫 줄은 Grüße 👋를 출력합니다. 오래된 macOS 버전에서는 플래그를 -D로 씁니다. 언어별 자세한 내용: JavaScript, Node.js, Python, PHP.

자주 묻는 질문

Base64 문자열은 어떻게 디코딩하나요?

위 입력란에 붙여넣으면 디코딩된 텍스트가 바로 나타납니다. 코드에서는 Base64를 바이트로 디코딩한 다음 그 바이트를 UTF-8로 읽습니다. Python에서는 base64.b64decode(s).decode(), Node.js에서는 Buffer.from(s, "base64").toString()입니다.

디코딩한 텍스트에 �나 é 같은 이상한 문자가 나오는 이유는 무엇인가요?

�는 바이트가 올바른 UTF-8이 아니라는 뜻이므로 텍스트가 다른 문자 인코딩으로 저장되었을 가능성이 높습니다. 문자 인코딩 메뉴에서 EUC-KR, Windows-1252, UTF-16LE 등을 시도하세요. é 자리에 é가 나온다면 누군가 인코딩하기 전에 이미 텍스트가 깨져 있었던 것입니다.

= 패딩이 없는 Base64도 디코딩할 수 있나요?

네. 디코더가 빠진 =를 직접 붙이고 상태 표시줄에 알려 줍니다. 패딩은 마지막 블록을 채울 뿐이므로 길이만 알면 언제든 복원할 수 있습니다.

디코딩한 출력이 알아볼 수 없는 글자투성이입니다. Base64가 망가진 건가요?

그보다는 데이터가 파일인 경우가 더 많습니다. 상태 표시줄의 “추정 형식” 항목을 확인하세요. 이미지, PDF, 압축 파일 등 바이너리 형식이면 파일을 미리 보거나 저장할 수 있는 디코더로 가는 링크가 나옵니다.

Base64는 키 없이 디코딩할 수 있나요?

언제나 가능합니다. Base64는 알파벳이 공개된 인코딩이므로 비밀을 지켜 주지 않습니다. 디코딩한 결과가 여전히 무작위로 보인다면 인코딩하기 전에 데이터를 암호화하거나 압축한 것입니다.