파일 업로드
  1. base64hub
  2. 파일 도구
  3. Base64 → 파일

Base64 파일 변환기

출처를 모르는 Base64 문자열을 붙여넣으면 도구가 첫 바이트로 어떤 파일인지 알아내 보여 주고 올바른 확장자로 저장합니다. 모든 처리는 이 브라우저 탭 안에서 이루어집니다.

무료 가입 없음, 제한 없음 로컬 업로드 없음 자동 60개 이상 파일 형식 감지 업데이트 2026. 10. 27.
입력 –출력 –크기 –

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

Base64를 파일로 디코딩하는 방법

  1. Base64 또는 data URI에 문자열을 붙여넣으세요. 표준 Base64와 URL-safe Base64 모두 받으며, 패딩, 줄 바꿈, 따옴표가 있든 없든 괜찮습니다. data URI 전체도 되고, CSS url("data:…"), HTML src="data:…", Markdown 이미지처럼 data URI가 들어 있는 텍스트도 됩니다. 파일에 든 긴 문자열은 .txt 파일 열기를 쓰거나 입력란에 놓으세요.
  2. 입력란 아래 상태 표시줄을 확인하세요. 입력이 올바른지, 어떤 변형(표준 또는 Base64URL)인지, 디코딩된 크기, 감지된 형식이 나옵니다. data URI라면 선언된 형식도 표시됩니다.
  3. 미리보기와 그 아래 세 필드를 보세요. 파일 이름, 확장자, MIME 유형은 감지 결과로 채워집니다. 여기에 입력한 값은 지우기를 누를 때까지 유지됩니다.
  4. 파일 다운로드를 누르거나, 바이트를 data:<MIME type>;base64,… 형태로 되돌려 받으려면 data URI로 복사를 누르세요.

예시는 클릭할 때마다 다른 테스트 파일을 불러옵니다. PNG, PDF, ZIP, WAV, DOCX, JSON, gzip, SVG입니다. Base64가 담긴 텍스트 파일이 아니라 PDF처럼 이미 바이너리인 파일을 놓으면, 도구가 그 사실을 알리고 반대 방향으로 변환하는 파일을 Base64로 링크를 보여 줍니다.

파일이 application/octet-stream으로 표시되는 이유

application/octet-stream은 “형식을 모르는 바이트"라는 뜻입니다. 이 레이블이 Base64 앞에 붙는 데는 평범한 이유가 있습니다. Chrome의 FileReader.readAsDataURL()은 브라우저가 형식을 모르는 모든 파일에 data:application/octet-stream;base64,를 만듭니다. 바이트는 보관하지만 형식은 보관하지 않는 저장소와 내보내기 시스템은 모든 것에 이 레이블을 붙입니다. 어떤 API는 아예 모든 첨부 파일을 octet-stream으로 선언합니다. 그러면 레이블에 의존하는 뷰어는 파일 표시를 거부하고, 다운로드한 파일에는 쓸모 있는 확장자가 붙지 않습니다.

대개 바이트만 보고도 형식을 알 수 있습니다. 대부분의 형식은 고정된 시그니처로 시작하고, 도구는 그중 60개 이상을 확인합니다. 시그니처가 겹치는 형식도 있어서, 그럴 때는 파일을 더 깊이 살펴봅니다.

첫 바이트Base64 시작 부분가능한 형식도구가 구별하는 방법
PK 03 04UEsDBZIP, DOCX, XLSX, PPTX, EPUB, ODT, ODS, JAR, APK항목 이름: word/, xl/, ppt/, mimetype 항목, AndroidManifest.xml, META-INF/MANIFEST.MF
RIFFUklGRWebP, WAV, AVI8번째 바이트의 네 글자
4번째 바이트의 ftypAAAA, 예: AAAAIGZ0eXBMP4, M4A, MOV, 3GP, HEIC, AVIF8–11번째 바이트의 브랜드
OggST2dnUwOgg Vorbis, Opus, Theora 동영상첫 페이지의 코덱 헤더
1A 45 DF A3GkXfoWebM, MKVwebm 문서 유형
D0 CF 11 E00M8R4KGxGuEDOC, XLS, PPT, Outlook MSG, 비밀번호로 보호된 Office 파일구별 불가. “DOC/XLS/MSG (OLE)“로 표시

전체 시그니처 목록은 자주 보는 Base64 접두사에 있습니다.

data URI가 선언한 형식과 내용이 다르면 “data URI에는 application/octet-stream(으)로 되어 있지만 내용은 PDF(으)로 보입니다.“처럼 안내가 나오고, 감지된 형식이 사용됩니다. 선언된 형식은 감지 근거가 약할 때, 즉 바이트가 일반 텍스트나 알 수 없는 바이너리로 보일 때만 우선합니다.

Base64 속 Base64, URL 인코딩, gzip

여러 시스템을 거친 데이터는 두 번 이상 감싸져 있는 경우가 많습니다. 도구는 디코딩한 뒤 결과가 또 다른 층인지 확인하고 다시 디코딩을 제안합니다.

안내일어난 일
“디코딩된 데이터 자체가 Base64 텍스트입니다(내부: PDF).”두 번 인코딩됨. 보통 두 코드 계층이 각자 “안전하게” 인코딩한 결과
“디코딩된 데이터가 URL 인코딩된 Base64입니다”Base64를 URL용으로 퍼센트 인코딩(%2B, %2F, %3D)한 뒤 다시 인코딩함
“디코딩된 데이터가 data: URI입니다.”페이로드가 아니라 data:… 문자열 전체를 인코딩함
“데이터가 gzip(으)로 압축되어 있습니다: 압축 해제 시 817 B (PDF).”공간을 아끼려고 인코딩 전에 압축함. 로그와 메시지 큐에서 흔하며, zlib도 인식

다시 디코딩은 안쪽 층을 입력란에 넣고 디코딩합니다. 뒤로는 한 단계 밖으로 돌아가며 최대 20단계까지 기억합니다. gzip과 zlib 안내는 도구가 실제로 압축을 해제한 뒤에만, 결과가 16 MB 이하일 때 나타납니다. gzip 미리보기는 헤더에 저장된 원래 파일 이름과 수정 시각도 보여 주며, 내용은 압축 해제본 저장으로 받을 수 있습니다. 텍스트 페이로드라면 gzip Base64 디코더가 더 직접적인 도구입니다.

올바른 확장자로 저장하기

Windows와 macOS는 확장자로 프로그램을 고르기 때문에, decoded.bin으로 저장한 PDF는 모든 바이트가 맞아도 깨진 것처럼 보입니다. 확장자와 MIME 유형 필드는 직접 입력하기 전까지 감지 결과를 따릅니다.

  • 파일 이름은 data URI의 name= 또는 filename= 파라미터나, 연 텍스트 파일의 이름에서 .txt나 .b64 끝부분을 뺀 것을 씁니다. report.pdf.b64.txt는 report.pdf로 저장됩니다.
  • 스프레드시트라는 것을 아는 OLE 파일이라면 확장자에 xls를 입력하세요. 도구는 DOC, XLS, MSG를 구별하지 못합니다.
  • 입력한 MIME 유형은 미리보기도 그 종류로 다시 그립니다. 도구는 바이너리라고 하는데 오디오일 것 같다면 audio/ogg를 입력해 오디오 플레이어로 시도하게 할 수 있습니다.
  • MIME 유형은 다운로드와 data URI로 복사에만 영향을 줍니다. 디스크의 파일에는 MIME 유형이 없고 바이트와 이름만 있습니다.

미리보기에 표시되는 내용

모든 결과에 형식, MIME 유형, 확장자, 크기, SHA-256 해시가 나오고, hex 덤프 표시로 처음 512바이트를 볼 수 있습니다. 알 수 없는 바이너리 데이터라면 hex 덤프가 처음부터 열려 있습니다. 종류별로는 다음과 같습니다.

종류미리보기
이미지그림과 픽셀 크기. 대부분의 브라우저에 디코더가 없어 HEIC, TIFF, JPEG XL은 보통 “표시할 수 없음” 안내가 나옵니다. Base64를 이미지로를 참고하세요.
PDF브라우저 PDF 뷰어, 버전, 페이지 수, 제목. Base64를 PDF로를 참고하세요.
오디오와 동영상재생 시간과 동영상 크기가 표시되는 플레이어
글꼴디코딩된 글꼴로 된 편집 가능한 예시 텍스트와 패밀리, 스타일, 글리프 수
ZIP, DOCX, XLSX, PPTX, EPUB파일마다 보기와 저장이 있는 항목 목록, Office 파일과 전자책은 문서 텍스트도 표시. Base64를 ZIP으로를 참고하세요.
텍스트문자 인코딩, 줄 수, 보기 좋게 정렬된 JSON, CSV는 표, XML은 루트 요소, HTML은 샌드박스
인증서와 키인증서 디코더 링크

코드에서 Base64의 MIME 유형 감지하기

Base64 24자는 18바이트로 디코딩되며, 흔한 시그니처를 판별하기에 충분합니다. 다음 코드는 브라우저와 Node.js 16 이상에서 작동합니다.

function sniffMime(b64) {
  const head = b64.replace(/^data:[^,]*,/, "").replace(/\s+/g, "").slice(0, 24)
    .replace(/-/g, "+").replace(/_/g, "/");
  const b = Uint8Array.from(atob(head), (c) => c.charCodeAt(0));
  const str = (start, len) => String.fromCharCode(...b.subarray(start, start + len));

  if (str(0, 5) === "%PDF-") return "application/pdf";
  if (str(0, 8) === "\x89PNG\r\n\x1a\n") return "image/png";
  if (b[0] === 0xff && b[1] === 0xd8 && b[2] === 0xff) return "image/jpeg";
  if (str(0, 4) === "GIF8") return "image/gif";
  if (str(0, 4) === "RIFF" && str(8, 4) === "WEBP") return "image/webp";
  if (str(0, 4) === "RIFF" && str(8, 4) === "WAVE") return "audio/wav";
  if (str(4, 4) === "ftyp") return "video/mp4"; // also M4A, MOV, HEIC: see bytes 8-11
  if (str(0, 4) === "PK\x03\x04") return "application/zip"; // also DOCX, XLSX, PPTX
  if (b[0] === 0x1f && b[1] === 0x8b) return "application/gzip";
  if (str(0, 3) === "ID3" || (b[0] === 0xff && (b[1] & 0xe6) === 0xe2)) return "audio/mpeg";
  return "application/octet-stream";
}

sniffMime("data:application/octet-stream;base64,JVBERi0xLjcKJeLjz9MK"); // "application/pdf"

명령줄에서는 file이 표준 입력으로 디코딩된 바이트를 읽습니다.

base64 -d payload.b64 | file -b --mime-type -

PDF라면 application/pdf가 출력됩니다. 대신 OpenSSL로 디코딩한다면 한 줄짜리 문자열에는 -A를 붙이세요. 이 옵션이 없으면 openssl base64 -d는 줄 끝에 마지막 줄 바꿈이 없거나 줄이 너무 길 때(OpenSSL 3.5에서 1,024자 이상) 아무 경고 없이 빈 결과를 씁니다. 자세한 내용은 JavaScript에서 Base64와 Bash에서 Base64에 있습니다.

자주 묻는 질문

Base64 문자열의 MIME 유형은 어떻게 알아내나요?

처음 몇 바이트를 디코딩해 알려진 파일 시그니처와 비교하세요. JVBERi0은 %PDF-로, iVBORw0KGgo는 PNG 시그니처로 디코딩됩니다. 이 페이지는 60개가 넘는 형식에 대해 이를 처리하며, 이 페이지의 JavaScript 함수로 흔한 형식은 직접 코드에서 판별할 수 있습니다.

"cannot display the file as application/octet-stream"은 무슨 뜻인가요?

application/octet-stream은 형식을 모르는 바이트에 붙는 범용 레이블이므로, 레이블을 믿는 뷰어는 판단할 근거가 없습니다. 같은 문자열을 여기에 붙여넣으세요. 레이블 대신 내용을 검사하고 확장자와 MIME 유형을 채워 줍니다.

형식이 감지되지 않으면 어떻게 하나요?

그러면 미리보기에 바이너리와 처음 512바이트의 hex 덤프가 표시됩니다. 형식을 알고 있다면 다운로드하기 전에 확장자와 MIME 유형을 입력하세요. MIME 유형은 미리보기도 바꾸므로 audio/ogg를 입력하면 도구가 바이트를 재생해 봅니다.

얼마나 큰 파일까지 디코딩할 수 있나요?

정해진 제한은 없고 기기 메모리가 한계입니다. Base64가 약 50 MB를 넘으면 디코딩하는 동안 페이지가 잠시 멈추며, 32 MB가 넘는 파일은 data URI로 복사가 꺼집니다.

파일이 어딘가에 업로드되나요?

아닙니다. 디코딩, 형식 감지, 미리보기는 브라우저에서 실행되며, 페이지의 Content Security Policy가 Cloudflare 조회수 집계를 제외한 네트워크 요청을 보내지 못하게 막습니다.