Base64란
Base64는 어떤 데이터든 안전한 문자 64개만으로 적는 방법입니다. A부터 Z, a부터 z, 숫자 0부터 9, 그리고 기호 +와 /를 씁니다. 이메일이나 일부 웹 양식처럼 일반 텍스트만 전달할 수 있는 시스템을 위해 만들어졌습니다. Base64 인코딩을 거치면 이미지, PDF, 한글 같은 어떤 언어의 텍스트든 이런 시스템을 손상 없이 통과할 수 있습니다.
Base64는 이메일 첨부 파일, CSS에 data URL로 넣은 이미지, JSON 웹 토큰(JWT), API 키, HTTP 기본 인증 헤더, 설정 파일 등 여러 곳에서 볼 수 있습니다.
Base64 도구 사용 방법
텍스트 인코딩. 텍스트 입력란에 입력하거나 붙여넣으면 입력하는 동안 오른쪽 입력란에 Base64가 나타납니다. 복사를 눌러 가져가세요.
Base64 디코딩. 오른쪽 Base64 입력란에 Base64를 붙여넣으면 원래 텍스트가 왼쪽에 나타납니다. 공백, 줄바꿈, 빠진 패딩, data:...;base64, 접두사도 모두 받아들입니다.
옵션.
- URL-safe (- 와 _):
+를-로,/를_로 바꾸고=패딩을 뺍니다. 링크, 쿠키, 파일 이름에 쓰세요. - 76자마다 줄바꿈: 결과를 76자 단위로 나눕니다. 이메일(MIME)에서 쓰는 배치입니다.
지우기를 누르면 두 입력란이 모두 비워집니다.
파일을 Base64로. 25MB 이하의 파일을 고릅니다. 문자열만 필요하면 Base64만을, 바로 쓸 수 있는 data:image/png;base64,... 값이 필요하면 Data URL을 고른 뒤 복사를 누릅니다.
Base64를 파일로. Base64나 data URL을 붙여넣습니다. 도구가 PNG, JPEG, GIF, WebP, PDF, ZIP 같은 흔한 형식을 감지해 파일 이름을 제안하고, 이미지라면 미리보기를 보여 줍니다. 파일 다운로드를 눌러 저장합니다.
Base64의 작동 원리
Base64는 입력을 3바이트(24비트)씩 읽습니다. 그 24비트를 6비트씩 네 묶음으로 나눕니다. 6비트 묶음 하나는 0부터 63 사이의 숫자이고, 이 숫자가 Base64 문자표에서 문자 하나를 고릅니다. 3바이트가 들어가서 4글자가 나옵니다. 그래서 Base64 결과는 입력보다 약 3분의 1 커집니다.
텍스트는 먼저 UTF-8로 바이트가 됩니다. 덕분에 악센트 문자와 이모지, 한글도 문제없이 처리됩니다. café는 5바이트가 되고, 그 바이트가 인코딩됩니다. 한글 한 글자는 UTF-8로 3바이트라서 한글 두 글자는 6바이트, Base64로는 정확히 8글자 7ZWc6riA가 됩니다. 오래된 도구 중에는 브라우저 함수 btoa를 그대로 쓰는 경우가 있는데, 이 함수는 Latin-1 밖의 문자가 하나라도 있으면 실패합니다. 한글을 넣으면 오류가 나는 도구가 있는 이유입니다.
예시
| 입력 | Base64 | URL-safe |
|---|---|---|
M |
TQ== |
TQ |
Ma |
TWE= |
TWE |
Man |
TWFu |
TWFu |
Hello, World! |
SGVsbG8sIFdvcmxkIQ== |
SGVsbG8sIFdvcmxkIQ |
café |
Y2Fmw6k= |
Y2Fmw6k |
Zoë |
Wm/Dqw== |
Wm_Dqw |
<?> |
PD8+ |
PD8- |
한글 |
7ZWc6riA |
7ZWc6riA |
안녕하세요 |
7JWI64WV7ZWY7IS47JqU |
7JWI64WV7ZWY7IS47JqU |
Zoë와 <?> 줄은 URL-safe 형식이 왜 필요한지 보여 줍니다. 링크 안의 /나 +는 링크를 깨뜨릴 수 있지만 _와 -는 안전합니다. 한글 두 예시는 바이트 수가 3의 배수라 패딩이 없고, +나 /도 나오지 않아 두 형식의 결과가 같습니다.
팁과 한계
- Base64는 보안 수단이 아닙니다. 아무것도 숨기지 않습니다. Base64 텍스트는 원본 데이터와 똑같이 다루세요.
- 오류 메시지를 확인하세요.
*같은 문자가 섞인 값을 붙여넣으면 어떤 문자가 올바른 Base64가 아닌지 알려 줍니다. - 바이너리 데이터는 파일로 받으세요. 디코딩한 바이트가 올바른 UTF-8 텍스트가 아니면 도구가 그렇게 알려 줍니다. 같은 Base64를 Base64를 파일로에 붙여넣고 다운로드하세요.
- 크기가 커집니다. 3MB 이미지는 Base64로 약 4MB가 됩니다. 인라인 data URL은 작은 아이콘에는 편리하지만 큰 사진에는 느립니다.
- 디코딩할 때 패딩은 없어도 됩니다. 빠진
=는 도구가 채워 줍니다.
다른 방법으로 Base64 인코딩하기
명령줄 (macOS, Linux). echo -n 'Hello, World!' | base64는 SGVsbG8sIFdvcmxkIQ==를 출력합니다. 디코딩은 base64 -d(예전 macOS에서는 base64 -D)로 합니다. -n을 빼면 끝의 줄바꿈까지 인코딩됩니다.
Windows. certutil -encode input.txt output.txt로 파일을 인코딩합니다. PowerShell에서는 [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes('Hello, World!'))로 텍스트를 인코딩합니다.
JavaScript (Node). Buffer.from('Hello, World!').toString('base64')는 SGVsbG8sIFdvcmxkIQ==를, Buffer.from('SGVsbG8=', 'base64').toString()은 Hello를 돌려줍니다.
Python. base64.b64encode('Hello, World!'.encode()).decode()도 같은 결과를 냅니다. base64.urlsafe_b64encode는 = 패딩을 남기므로 Zoë가 Wm_Dqw==가 된다는 점에 주의하세요.
관련 도구
텍스트를 웹 주소에 안전하게 넣으려면 URL 인코더, 디코더를 쓰세요. 텍스트 뒤의 실제 바이트를 보려면 16진수 텍스트 변환기나 UTF-8 인코딩 도구를 사용해 보세요.