설정 파일이나 API 응답에서 알파벳과 숫자, +, /, =로만 이루어진 이상한 문자열을 본 적 있다면 그건 십중팔구 Base64입니다. 이 글에서는 Base64가 정확히 무엇을 하는 인코딩인지, 왜 쓰이는지, 그리고 왜 보안 수단이 될 수 없는지 설명합니다.
Base64가 하는 일 — 바이너리를 텍스트로
Base64는 임의의 바이너리 데이터를 이메일, JSON, URL처럼 텍스트만 안전하게 다루는 환경에서도 깨지지 않고 전달할 수 있도록 아스키(ASCII) 텍스트로 바꾸는 인코딩입니다. 이름 그대로 64개의 문자(A-Z, a-z, 0-9, +, /)만 사용해 데이터를 표현합니다. 원리는 단순합니다. 원본 데이터를 3바이트(24비트)씩 묶고, 이를 6비트씩 4등분해서 각 6비트 값(0~63)을 64개 문자표에서 하나씩 골라 4개의 문자로 바꿉니다. 그래서 "3바이트가 4글자가 된다"는 규칙이 성립하며, 결과적으로 인코딩된 데이터는 원본보다 약 33% 커집니다. 마지막 묶음이 3바이트를 채우지 못하면 남는 자리를 = 문자로 채워 길이를 맞춥니다.
실제 인코딩 예시
텍스트 Man은 정확히 3바이트(M=77, a=97, n=110)이므로 그대로 4글자 TWFu로 인코딩됩니다. 반면 Hello는 5바이트라 3바이트씩 딱 나누어떨어지지 않는데, 인코딩 결과는 SGVsbG8=입니다. 마지막에 붙은 = 하나가 바로 부족한 바이트를 채우기 위한 패딩입니다. 반대로 디코딩은 이 과정을 그대로 거꾸로 밟아 4글자를 다시 3바이트로 되돌리는 것뿐입니다.
왜 쓰이나 — 텍스트만 통과하는 통로들
Base64가 널리 쓰이는 이유는 인터넷 인프라 중 상당수가 원래 텍스트 전용으로 설계되었기 때문입니다.
- 이메일 첨부파일(MIME) — SMTP는 원래 7비트 텍스트 기준으로 설계되어 이미지·문서 같은 바이너리 파일을 그대로 담을 수 없어, Base64로 인코딩해 본문에 끼워넣습니다.
- 데이터 URI —
data:image/png;base64,iVBORw0KG...처럼 이미지를 별도 파일 없이 HTML·CSS 안에 직접 삽입할 때 사용합니다. - JWT(JSON Web Token) — Header·Payload를 URL에 안전하게 쓸 수 있는 텍스트로 표현하기 위해 Base64URL(표준 Base64의 변형)을 사용합니다.
- API 인증 헤더 — HTTP Basic 인증의
Authorization: Basic ...값도사용자명:비밀번호를 Base64로 인코딩한 것입니다.
Base64는 암호화가 아니다
가장 중요하게 기억해야 할 점입니다. Base64는 데이터를 "표현하는 방식"만 바꿀 뿐, 어떤 키도 비밀도 필요로 하지 않습니다. 인코딩된 문자열만 있으면 누구나, 도구나 브라우저 콘솔의 한 줄 코드만으로 즉시 원본을 복원할 수 있습니다. 따라서 Base64로 감쌌다고 해서 비밀번호나 API 키, 개인정보가 "숨겨졌다"고 착각해서는 안 됩니다. 실제로 값을 비공개로 유지해야 한다면 AES 같은 암호화, 혹은 애초에 값을 전송·저장하지 않는 설계가 필요합니다. Base64는 어디까지나 바이너리를 텍스트 통로에 안전하게 통과시키기 위한 인코딩일 뿐입니다.
Base64 문자열을 직접 인코딩하거나, 알 수 없는 Base64 값이 실제로 무엇을 담고 있는지 바로 디코딩해보고 싶다면 아래 도구로 확인해보세요.
Base64 문자표 (64개 인덱스)
Base64는 6비트(0~63) 값을 아래 64개 문자에 매핑합니다. 3바이트(24비트)를 4개 문자로 인코딩합니다.
| 인덱스 | 문자 |
|---|---|
| 0 – 25 | A – Z |
| 26 – 51 | a – z |
| 52 – 61 | 0 – 9 |
| 62 | + |
| 63 | / |
표준 Base64 vs Base64URL
| 구분 | 표준 Base64 | Base64URL |
|---|---|---|
| 62번 문자 | + | - |
| 63번 문자 | / | _ |
| 패딩 | = 사용 | 보통 생략 |
| 주 용도 | MIME·이메일 첨부·데이터 URI | URL·파일명·JWT |
+·/·=는 URL에서 특수문자로 취급되므로, URL이나 JWT에서는 -·_로 바꾸고 패딩을 생략한 Base64URL을 씁니다.
🔐 이 작업, 도구로 바로 해보세요
Base64 인코딩이란? 언제 어떻게 쓰나 — 이메일 첨부·데이터 URI에 쓰이는 이유