Base64 인코딩·디코딩
텍스트와 파일을 Base64로 인코딩하거나 디코딩합니다. 한글(UTF-8)도 깨지지 않습니다.
사용 방법
- 인코딩: 텍스트를 넣으면 UTF-8 바이트로 바꾼 뒤 Base64로 보여 줍니다.
- 디코딩: Base64를 넣으면 원래 텍스트로 되돌립니다. 공백·줄바꿈은 무시하고,
data:...;base64, 앞부분도 자동으로 떼어 냅니다. - 디코딩 결과가 텍스트가 아니라 이미지 같은 이진 데이터이면 16진수로 앞부분을 보여 주고, 파일로 저장할 수 있습니다.
- 파일을 Base64나 data URL로 바꾸려면 아래 파일 → Base64에서 파일을 고르세요.
인코딩 예시
| 텍스트 | UTF-8 바이트 | Base64 | Base64URL (패딩 없음) |
|---|
| Hello | 5 | SGVsbG8= | SGVsbG8 |
| foobar | 6 | Zm9vYmFy | Zm9vYmFy |
| 한글 | 6 | 7ZWc6riA | 7ZWc6riA |
| 안녕하세요 | 15 | 7JWI64WV7ZWY7IS47JqU | 7JWI64WV7ZWY7IS47JqU |
| 😀 | 4 | 8J+YgA== | 8J-YgA |
| a+b/c? | 6 | YStiL2M/ | YStiL2M_ |
"foobar"의 결과 Zm9vYmFy는 Base64 표준 문서(RFC 4648) 10장의 테스트 값과 같습니다. 바이트 수가 3의 배수가 아니면 끝에 = 가 1~2개 붙습니다(예: 1,000바이트 → 1,336자).
알아 두기
- Base64는 암호화가 아니라 표기 방식일 뿐이라 누구나 되돌릴 수 있습니다. 비밀번호·개인정보를 숨기는 용도로 쓰면 안 됩니다.
- 입력칸의 줄바꿈은 브라우저가 LF(\n)로 통일하므로, Windows 줄바꿈(CRLF)이 필요한 경우 결과가 다를 수 있습니다.
- 짝이 맞지 않는 서로게이트처럼 UTF-8로 바꿀 수 없는 깨진 문자가 있으면 오류로 알려 줍니다.
자주 묻는 질문
btoa("한글")을 실행하면 InvalidCharacterError가 나는 이유는?
btoa는 한 글자가 1바이트(Latin-1)인 문자열만 받기 때문입니다. 한글은 UTF-8에서 한 글자가 3바이트라 먼저 TextEncoder로 바이트 배열로 바꾼 뒤 인코딩해야 합니다. 이 도구는 그렇게 처리하므로 한글·이모지가 깨지지 않습니다.
Base64와 Base64URL은 무엇이 다른가요?
Base64URL은 주소나 파일 이름에 넣기 곤란한 + 와 / 를 각각 - 와 _ 로 바꾸고, 보통 끝의 = 패딩을 뺍니다(RFC 4648 5장). JWT 토큰의 각 부분이 대표적인 Base64URL입니다. 디코딩할 때는 두 형식을 자동으로 구분합니다.
끝에 붙는 = 는 지워도 되나요?
= 는 전체 길이를 4의 배수로 맞추는 패딩이라 없어도 원래 데이터를 복원할 수 있습니다. 다만 패딩을 요구하는 라이브러리도 있으니 받는 쪽 규칙을 확인하세요. 이 도구는 패딩이 있든 없든 디코딩하되, 개수가 틀리면 오류로 알려 줍니다.
Base64로 바꾸면 용량이 얼마나 늘어나나요?
3바이트가 4글자가 되므로 약 33% 커집니다. 예를 들어 30KB 이미지는 약 40KB 문자열이 됩니다. 76자마다 줄을 바꾸는 MIME 형식이면 줄바꿈 문자만큼 조금 더 늘어납니다.
작은 아이콘을 data URL로 바꿔 CSS에 넣어도 되나요?
몇 KB 이하의 작은 아이콘은 요청 수를 줄일 수 있어 괜찮지만, 큰 이미지는 CSS·HTML 파일이 커지고 따로 캐시되지 않아 오히려 느려질 수 있습니다. 아래 파일 변환에서 "data URL" 결과를 복사해 url(...) 안에 넣으면 됩니다.
이 도구가 도움이 되었다면 공유해 주세요지금 입력한 값이 링크에 함께 담깁니다
계산 근거
이 계산기가 쓰는 세율·요율·기준의 출처입니다. 숫자가 맞는지 직접 확인해 보세요.
계산 결과가 이상한가요? 알려 주세요.
계산 결과는 참고용이며 법적 효력이 없습니다.