Base64 인코딩이란 — 이진 데이터를 텍스트로 변환하는 원리 - Tooly 가이드

2026. 03. 03

Base64 인코딩이란 — 이진 데이터를 텍스트로 변환하는 원리

Base64가 이진 데이터를 텍스트로 변환하는 원리와 이메일·API 인증·JWT에서 쓰이는 이유. JS·Python·PHP 코드 예제와 암호화와의 차이.


Base64 인코더/디코더 →

Base64가 필요한 이유

컴퓨터에서 모든 데이터는 이진수(0과 1)로 저장된다. 이미지, PDF, 오디오 파일은 이진 데이터다. 문제는 이메일, HTTP 헤더, JSON 같은 일부 통신 방식이 순수한 텍스트(ASCII)만 안전하게 다룬다는 점이다.

이진 데이터를 직접 텍스트 채널로 보내면 특수 바이트가 제어 문자로 해석되거나 데이터가 손상될 수 있다. Base64는 이진 데이터를 64개의 ASCII 문자만 사용해 표현함으로써 어떤 텍스트 기반 시스템에서도 안전하게 전달될 수 있도록 한다.

인코딩 원리 — 3바이트를 4자로

Base64는 입력 데이터를 3바이트(24비트) 단위로 나눠 처리한다. 24비트를 6비트씩 4그룹으로 나누고, 각 6비트 값(0~63)을 64자 테이블에서 대응하는 문자로 바꾼다.

3바이트 입력 → 4자 출력이므로, 인코딩된 결과는 원본보다 약 33% 크다. 입력 데이터가 3의 배수가 아니면 = 로 패딩한다.

실제 활용 사례

이메일 첨부파일
SMTP 프로토콜은 7비트 ASCII 텍스트만 처리하도록 설계됐다. 이메일에 이미지나 파일을 첨부할 때 이메일 클라이언트가 자동으로 Base64 인코딩해서 보낸다.

HTTP Basic Authentication
HTTP 헤더에서 Authorization: Basic dXNlcjpwYXNz 형태를 볼 수 있다. dXNlcjpwYXNzuser:pass를 Base64로 인코딩한 값이다. Base64 인코딩이지 암호화가 아니므로 누구나 디코딩할 수 있다. HTTPS 없이는 의미가 없다.

JWT에서의 Base64
JWT(JSON Web Token)는 헤더.페이로드.서명 구조다. 헤더와 페이로드는 Base64URL로 인코딩된 JSON이다. 중요한 점: JWT 페이로드는 누구나 디코딩할 수 있으므로 비밀 정보를 페이로드에 넣어선 안 된다.

언어별 Base64 인코딩/디코딩

JavaScript (브라우저)

btoa("hello world");     // "aGVsbG8gd29ybGQ="
atob("aGVsbG8gd29ybGQ="); // "hello world"

Node.js

Buffer.from("hello").toString('base64');
Buffer.from("aGVsbG8=", 'base64').toString('utf-8');

Python

import base64
base64.b64encode(b"hello world")
base64.b64decode("aGVsbG8gd29ybGQ=")

PHP

base64_encode("hello world");
base64_decode("aGVsbG8gd29ybGQ=");

Base64 ≠ 암호화

Base64는 인코딩(encoding)이다. 암호화(encryption)와 다르다. 암호화는 키 없이는 내용을 알 수 없도록 변환한다. Base64는 단순히 다른 표현 방식으로 변환할 뿐이고 누구나 디코딩할 수 있다. 비밀번호나 민감한 정보를 Base64로 "숨겼다"고 생각하는 경우가 있는데, 보안 효과가 없다. 민감한 데이터는 AES, RSA 같은 실제 암호화 알고리즘을 써야 한다.

목록