Base64 인코더/디코더
🔐 인코딩텍스트를 Base64 형식으로 바꾸거나 Base64 문자열을 원문으로 되돌립니다.
🔐 Base64 인코딩이란?
Base64는 바이너리를 텍스트로 안전하게 옮기기 위한 인코딩입니다. 1987년 RFC 1421 초안에 처음 등장한 이후 PEM, MIME(RFC 2045)을 거쳐 지금까지 표준으로 자리잡았습니다. 0~255의 바이너리 값을 6비트씩 끊어 A-Z, a-z, 0-9, +, / 의 64개 문자로 매핑하고, 4의 배수로 맞추기 위해 부족한 자리에 =(패딩)을 채웁니다. 크기는 약 4/3배(33%↑)로 늘지만, 라우터나 메일 게이트웨이가 데이터를 임의로 깨뜨리지 않도록 보호해 줍니다.
💡 실무에서 자주 마주치는 상황
- 이미지를 HTML에 임베드: 5KB 이하 아이콘은
data:image/png;base64,iVBOR...형식으로 박아 넣어 HTTP 요청 1건을 줄이는 경우가 많습니다. CSS 스프라이트의 대체재로도 쓰입니다. - API 응답에 PDF/이미지 포함: JSON에 바이너리를 그대로 넣을 수 없어 Base64 문자열로 감싸 보냅니다. AWS S3 pre-signed URL이 부담스러운 작은 미리보기에 적합합니다.
- Basic 인증 헤더:
Authorization: Basic dXNlcjpwYXNz형식. user:pass 를 Base64로 묶을 뿐 암호화가 아니므로 반드시 HTTPS와 함께 써야 합니다. - JWT 토큰: Header와 Payload가 점(.)으로 구분되며 Base64url(패딩 없음, +→-, /→_) 변형을 사용합니다. 일반 Base64를 그대로 URL에 넣으면 +가 공백으로 해석되는 문제가 있습니다.
- QR 코드용 페이로드 압축: 짧은 바이너리를 한 줄로 직렬화할 때 사용합니다.
⚠️ 인코딩 시 주의할 점
- UTF-8 멀티바이트 문자 — 한글이나 이모지를
btoa()에 바로 넣으면 InvalidCharacterError가 납니다. 이 도구는 내부적으로 UTF-8 바이트로 변환한 뒤 Base64를 적용하므로 안전합니다. - 줄바꿈 처리 — 76자마다
\r\n이 들어간 Base64는 MIME 표준에서 허용되지만 JSON이나 헤더에서는 빼야 합니다. - 원문 추측이 매우 쉬움 — 비밀번호나 토큰을 "가리는 용도"로 쓰면 안 됩니다.
🔒 보안 주의
Base64는 누구나 1초 만에 풀 수 있는 인코딩일 뿐 암호화가 아닙니다. 비밀번호 보호에는 bcrypt/Argon2, 통신 보호에는 HTTPS/TLS를 써야 합니다.
자주 묻는 질문
Base64로 비밀번호를 가리면 안전한가요?▼
아닙니다. Base64는 누구나 1초 만에 풀 수 있는 인코딩일 뿐 암호화가 아닙니다. 비밀번호는 bcrypt, Argon2 같은 해시 함수로, 통신 보호는 HTTPS/TLS로 해야 합니다.
= 패딩 문자가 왜 붙나요? 빼도 되나요?▼
원본 길이가 3바이트 단위로 떨어지지 않을 때 4문자 블록을 채우려고 추가됩니다. RFC 4648의 Base64url 규격은 패딩을 생략해도 되며, JWT가 대표적인 예입니다. 일반 Base64는 보통 패딩을 유지합니다.
큰 이미지를 Data URL로 박는 게 항상 좋은가요?▼
아닙니다. 5KB 이하의 작은 아이콘에만 유리합니다. 큰 이미지는 base64로 임베드하면 HTML 파일이 커져 초기 렌더링과 캐시 효율이 모두 떨어집니다. 보통 10KB 이상은 별도 파일로 두는 편이 빠릅니다.
Base64와 Base64url의 차이는?▼
URL과 파일명에서 충돌하는 +와 /를 각각 -와 _로 바꾸고 패딩(=)을 생략한 변형이 Base64url(RFC 4648 §5)입니다. JWT, OAuth state 파라미터 등 URL 친화적 위치에서 사용됩니다.