tooliv

Base64 인코딩/디코딩

텍스트를 Base64로 인코딩하거나 Base64 문자열을 원본 텍스트로 디코딩합니다.

입력

결과

Base64 핵심 질문

Base64 인코딩이란 무엇인가요?

바이너리 데이터를 텍스트 형태로 안전하게 전달하기 위해 ASCII 문자열로 바꾸는 인코딩 방식입니다. 파일 첨부, Data URI, 인증 토큰 등에서 널리 쓰입니다.

Base64로 인코딩하면 데이터 크기가 커지나요?

네. 일반적으로 약 33% 정도 커집니다. 3바이트를 4개의 문자로 표현하는 구조라서 전송 호환성은 좋아지지만 크기는 늘어납니다.

Base64는 암호화인가요?

아닙니다. Base64는 누구나 쉽게 되돌릴 수 있는 인코딩일 뿐입니다. 민감한 정보를 보호하려면 별도의 암호화 알고리즘이 필요합니다.

자주 묻는 질문

Base64 인코딩이란 무엇인가요?
바이너리 데이터를 ASCII 문자열로 변환하는 인코딩 방식입니다. A-Z, a-z, 0-9, +, / 총 64개 문자를 사용하여 데이터를 표현합니다.
Base64로 인코딩하면 데이터 크기가 커지나요?
네, 약 33% 정도 크기가 증가합니다. 3바이트를 4개의 ASCII 문자로 변환하기 때문입니다.
Base64는 암호화인가요?
아닙니다. Base64는 인코딩(변환)이지 암호화가 아닙니다. 누구나 쉽게 디코딩할 수 있으므로 민감한 정보 보호 용도로는 사용하면 안 됩니다.
Base64는 어디에 주로 사용되나요?
이메일 첨부파일(MIME), HTML/CSS 내 이미지 임베딩(Data URI), JWT 토큰, API 인증 등에 사용됩니다.
입력한 데이터가 서버로 전송되나요?
아닙니다. 모든 인코딩/디코딩이 브라우저에서 처리되며, 데이터가 외부로 전송되지 않습니다.

Base64 인코딩이란?

Base64는 바이너리 데이터를 텍스트로 안전하게 변환하는 인코딩 방식입니다. 이름에서 알 수 있듯이 64개의 인쇄 가능한 ASCII 문자(A-Z, a-z, 0-9, +, /)를 사용하여 데이터를 표현합니다. 이메일, 웹, API 같은 텍스트 기반 시스템에서 이미지나 파일 같은 바이너리 데이터를 주고받아야 할 때 필수적으로 사용됩니다.

인코딩 과정

Base64 인코딩은 원본 데이터를 6비트 단위로 쪼개서 각 단위를 64개 문자 중 하나에 매핑합니다. 구체적인 과정을 "Man"이라는 문자열로 살펴보겠습니다.

1단계: 각 문자를 ASCII 코드로 변환합니다. M=77, a=97, n=110. 2단계: 이진수로 바꿉니다. 01001101 01100001 01101110 (총 24비트). 3단계: 6비트씩 나눕니다. 010011 / 010110 / 000101 / 101110. 4단계: 각 6비트 값을 Base64 테이블에서 찾습니다. 19=T, 22=W, 5=F, 46=u. 결과: "Man"은 "TWFu"가 됩니다.

원본 데이터가 3바이트(24비트)의 배수가 아닐 때는 패딩 문자 =를 붙입니다. 예를 들어 "A"(1바이트)는 "QQ=="로, "AB"(2바이트)는 "QUI="로 인코딩됩니다. 이 패딩 덕분에 디코더가 원본 데이터의 정확한 길이를 알 수 있습니다.

Base64 인코딩 테이블

아래 표는 6비트 값(0~63)에 대응하는 Base64 문자를 보여줍니다.

문자 문자 문자 문자
0A16Q32g48w
1B17R33h49x
2C18S34i50y
3D19T35j51z
4E20U36k520
5F21V37l531
6G22W38m542
7H23X39n553
8I24Y40o564
9J25Z41p575
10K26a42q586
11L27b43r597
12M28c44s608
13N29d45t619
14O30e46u62+
15P31f47v63/

패딩 문자 =는 테이블에 포함되지 않으며, 입력 데이터의 길이가 3의 배수가 아닐 때만 출력 끝에 추가됩니다.

Base64 활용 사례

이메일 MIME 인코딩: 이메일 시스템(SMTP)은 원래 7비트 ASCII만 전송할 수 있도록 설계되었습니다. 이미지, PDF 같은 파일을 첨부하면 내부적으로 Base64로 인코딩되어 전송됩니다. 받는 쪽 메일 클라이언트가 다시 디코딩해서 원본 파일을 복원하는 구조입니다.

Data URI (이미지 인라인 삽입): 웹 개발에서 작은 아이콘이나 로고를 별도 파일 없이 HTML/CSS 안에 직접 삽입할 수 있습니다. data:image/png;base64,iVBORw0KGgo... 형태로 작성하면 HTTP 요청 수를 줄여 성능을 개선할 수 있습니다. 다만 Base64 인코딩 시 크기가 약 33% 증가하므로, 수 KB 이하의 작은 이미지에만 적합합니다.

JWT 토큰 구조: 로그인 인증에 널리 쓰이는 JWT(JSON Web Token)는 Header.Payload.Signature 세 부분으로 구성되는데, Header와 Payload는 Base64URL로 인코딩됩니다. Base64URL은 표준 Base64에서 +를 -로, /를 _로 바꾸고 패딩(=)을 제거한 변형입니다.

API Basic 인증: HTTP Basic Authentication에서는 username:password 문자열을 Base64로 인코딩하여 Authorization 헤더에 담아 전송합니다. 단, 이것은 전송 형식을 맞추는 것일 뿐 보안 기능이 아니므로, 반드시 HTTPS와 함께 사용해야 합니다.

Base64 vs 다른 인코딩 비교

방식 용도 크기 증가 특징
Base64이메일, Data URI, JWT약 33%64개 ASCII 문자 사용, 가장 보편적
Base32OTP, 파일 시스템약 60%대소문자 구분 없는 32개 문자
Hex(16진수)해시값, 색상코드, 디버깅100%0-9, a-f 16개 문자, 사람이 읽기 쉬움
URL 인코딩URL 파라미터최대 200%%XX 형태, 특수문자/한글에만 적용

개발에서 Base64 사용하기

대부분의 프로그래밍 언어에서 Base64 인코딩/디코딩 함수를 기본 제공합니다.

JavaScript: 브라우저와 Node.js 모두에서 btoa() 함수로 인코딩, atob() 함수로 디코딩할 수 있습니다. 다만 btoa()는 Latin-1 문자만 지원하므로, 한글 같은 유니코드 문자를 처리하려면 먼저 encodeURIComponent()로 변환하거나 TextEncoder를 사용해야 합니다.

Python: base64 모듈의 b64encode()와 b64decode() 함수를 사용합니다. import base64 후 base64.b64encode(b"Hello")처럼 바이트 문자열을 넘기면 됩니다.

중요한 주의사항: Base64는 인코딩이지 암호화가 아닙니다. Base64로 변환된 문자열은 누구나 즉시 디코딩할 수 있으므로, 비밀번호나 민감한 정보를 보호하는 용도로는 절대 사용하면 안 됩니다. 보안이 필요하다면 AES, RSA 같은 정식 암호화 알고리즘을 사용하세요.

이 도구에서 입력하는 모든 데이터는 브라우저 안에서만 처리됩니다. 서버로 전송되거나 외부에 저장되지 않으므로 안심하고 사용할 수 있습니다.

관련 도구