간단한 단어 디코딩하기
SGVsbG8gV29ybGQ=
Hello World
끝의 =는 패딩입니다. Hello World가 11바이트라 3의 배수가 아니기 때문이죠. 디코딩할 때는 이 패딩이 알아서 정리됩니다.
Base64 문자열과 파일을 즉시 인코딩/디코딩.
마지막 업데이트
Base64는 바이너리 데이터를 출력 가능한 64개 문자로 표현하는 인코딩 방식입니다. 텍스트만 다루는 시스템에 바이트를 실어 보내야 할 때 자주 쓰이죠. HTML에 박아 넣는 작은 이미지, 토큰, 이메일 첨부파일, data URL, 로그에 복붙해야 하는 비밀값, 바이너리를 담는 JSON 필드 같은 상황에서 거의 매번 등장합니다.
Base64는 *인코딩*이지 암호화가 아닙니다. 누구든 디코더에 넣기만 하면 원본이 바로 드러나기 때문에 보안 수단으로 착각하면 안 됩니다. Base64 안에 들어 있는 값은 *인코딩 이전에* 따로 암호화해 두지 않았다면 사실상 공개된 데이터라고 봐야 합니다.
내부 동작을 보면, Base64는 3바이트(24비트)를 가져다가 고정된 64자 알파벳(A–Z, a–z, 0–9, +, /) 중 4개의 문자로 다시 씁니다. 입력 길이가 3의 배수가 아니면 끝에 =를 한두 개 붙여 패딩을 채우고요. Base64 문자열 끝에 =가 붙어 있는 이유가 바로 이것입니다.
= 같은 패딩 문자는 마지막 4글자 그룹을 채우는 정상적인 부호입니다.일반 텍스트나 파일을 Base64로 만들고 싶다면 인코딩(Encode)을, Base64 문자열에서 원본을 되찾고 싶다면 디코딩(Decode)을 선택하세요.
텍스트 박스에 문자열을 붙여 넣거나, 드롭 영역에 파일(이미지, PDF 등 무엇이든)을 끌어다 놓으세요. 파일은 HTML이나 CSS에 바로 임베드할 수 있는 data: URL 형태로 변환됩니다.
인코딩 결과는 Base64 문자열이고, 디코딩 결과는 원본 텍스트입니다. 입력이 파일이었다면 복원된 바이트가 다운로드 링크 형태로 제공됩니다.
복사 버튼을 누르면 클립보드로 들어갑니다. 모든 처리는 브라우저 안에서만 이루어지므로 입력값이 외부로 빠져나가지 않습니다.
Base64를 쓰다 보면 계속 마주치게 되는 핵심 개념들입니다. 자세한 명세는 RFC 4648에 정의돼 있습니다.
| 구성 요소 | 의미 | 예시 |
|---|---|---|
| 알파벳 | 표준 Base64에서 쓰는 64개 문자 | A–Z, a–z, 0–9, +, / |
| URL-safe 알파벳 | JWT와 URL에서 사용 | A–Z, a–z, 0–9, -, _ |
| 패딩 | 길이가 3의 배수가 아닐 때 마지막 그룹을 채움 | = 또는 == |
| 그룹 단위 | 인코딩 한 덩어리당 바이트 수 → 출력 4글자 | 3바이트 → 4글자 |
| 길이 증가 | 출력은 입력보다 약 33% 커짐 | 100 B → 136자 |
| Data URL | HTML/CSS에 파일을 인라인으로 박아 넣기 | data:image/png;base64,... |
SGVsbG8gV29ybGQ=
Hello World
끝의 =는 패딩입니다. Hello World가 11바이트라 3의 배수가 아니기 때문이죠. 디코딩할 때는 이 패딩이 알아서 정리됩니다.
{"role":"student","active":true}eyJyb2xlIjoic3R1ZGVudCIsImFjdGl2ZSI6dHJ1ZX0=
JWT 토큰의 각 세그먼트도 정확히 이런 식으로 인코딩됩니다. JWT 페이로드가 보통 eyJ로 시작하는 이유가 여기 있는데, 이건 {"의 Base64 형태입니다.
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNgAAIAAAUAAen8GVAAAAAASUVORK5CYII=
앞쪽은 미디어 타입(image/png)과 인코딩 방식(base64)을 선언하는 부분이고, 콤마 뒤가 실제 파일 내용입니다. 페이지와 함께 즉시 로드되어야 하는 작은 이미지에 유용합니다.
Pj4/Pyc+Pg==
Pj4_Pyc-Pg
URL-safe Base64는 +를 -로, /를 _로 바꿉니다. 그래야 추가 이스케이프 없이 URL에 그대로 넣을 수 있거든요. JWT가 이 변형을 사용합니다.
= 패딩을 손으로 떼어낸 다음, 패딩을 요구하는 엄격한 디코더에 그대로 집어넣는 경우. (URL-safe 디코더는 보통 패딩 누락을 허용하지만, 표준 디코더는 거부할 수 있습니다.)=를 한두 개 붙여 패딩 처리합니다.atob(), Node.js는 Buffer.from(str, 'base64'), Python은 base64.b64decode()를 쓰면 됩니다.=가 붙는 이유는요?=는 패딩입니다. Base64는 입력 3바이트마다 4글자를 만들어 내는데, 입력 길이가 3의 배수가 아닐 때 인코딩 결과 길이를 4의 배수로 맞추기 위해 =를 한두 개 덧붙입니다.data:image/png;base64,... 형태의 URL에 넣으면, 별도 네트워크 요청 없이 이미지를 HTML, CSS, JSON에 직접 임베드할 수 있습니다.