Base64 인코딩 원리와 URL-Safe 변환, 실무 활용 완벽 가이드
Base64 인코딩의 비트 단위 동작 원리, 패딩 문자(=)의 존재 이유, URL-Safe Base64 변환 및 데이터 URL 활용법을 예제와 함께 자세히 알아봅니다.
Base64 인코더 / 디코더
서버 전송 없이 100% 브라우저 로컬에서 안전하게 직접 테스트하고 검증해보세요.
Base64 인코딩이란 무엇이며 왜 필요한가?
Base64는 RFC 4648로 정의된 2진 바이너리-텍스트 인코딩 체계입니다. 초기의 네트워크 프로토콜(SMTP 이메일, HTTP 등)은 7비트 ASCII 문자만을 안전하게 전송하도록 설계되었습니다.
이러한 레거시 전송 채널에 이미지(JPEG/PNG), 압축 파일(ZIP), 암호화 해시와 같은 원시 바이너리 데이터를 직접 실어 보내면, 중간 라우터나 게이트웨이가 제어 문자나 비ASCII 바이트를 임의로 변조하거나 삭제할 위험이 있었습니다. Base64는 임의의 바이너리 데이터를 전 세계 모든 시스템에서 안전하게 인쇄 가능한 64개의 ASCII 문자(A-Z, a-z, 0-9, +, /)로 변환하여 이 문제를 해결합니다.
비트 단위 변환 알고리즘: 3바이트를 4문자로 변환하는 원리
Base64의 핵심 알고리즘은 바이너리 데이터를 3바이트(24비트) 단위로 묶는 것입니다. 이 24비트를 다시 6비트씩 4조각으로 분할합니다(2^6 = 64이므로 6비트로 0부터 63까지 표현 가능).
분할된 각 6비트 값은 사전에 정의된 Base64 색인 표와 1:1로 매핑됩니다:
- 0~25:
A-Z - 26~51:
a-z - 52~61:
0-9 - 62:
+ - 63:
/
원래 3바이트였던 원시 데이터가 4개의 ASCII 문자로 표현되므로, Base64 인코딩은 항상 약 33%의 용량 증가(4/3 비율)를 수반합니다.
원본 문자열: 'M' 'a' 'n'
ASCII (바이트): 01001101 01100001 01101110 (총 24비트)
6비트씩 분할: 010011 | 010110 | 000101 | 101110
10진수 환산: 19 | 22 | 5 | 46
Base64 문자표: 'T' | 'W' | 'F' | 'u'
최종 인코딩 결과: "TWFu"패딩 문자(=)는 왜 존재하며 언제 붙는가?
입력 데이터의 바이트 길이가 3의 배수가 아닐 때 패딩 문자(=)가 사용됩니다:
- 1바이트가 남을 때: 8비트를 처리하기 위해 6비트 1개와 나머지 2비트에 0을 4개 채워 6비트 2개를 만든 뒤, 나머지 2개 자리를
==로 채웁니다. - 2바이트가 남을 때: 16비트를 6비트 2개와 나머지 4비트에 0을 2개 채워 6비트 3개를 만든 뒤, 마지막 1자리를
=로 채웁니다. - 입력 데이터 길이가 3의 배수로 딱 떨어지면 패딩이 붙지 않습니다.
표준 Base64 vs URL-Safe Base64: URL 파라미터 깨짐 방지
표준 Base64는 62번째와 63번째 문자로 +와 /를 사용합니다. 그러나 웹 URL에서 +는 쿼리 스트링의 공백을 의미하고, /는 경로 구분자로 쓰입니다.
표준 Base64 문자열을 URL 쿼리나 JWT 토큰에 그대로 넣으면 웹 서버가 +를 공백으로 디코딩하여 데이터가 훼손됩니다. 이를 방지하기 위해 URL-Safe Base64(RFC 4648 Section 5)는 +를 -(하이픈)으로, /를 _(언더스코어)로 치환하고, URL 인코딩을 피하기 위해 끝의 = 패딩을 제거합니다.
// 표준 Base64 -> URL-Safe Base64 변환
function toUrlSafeBase64(base64Str) {
return base64Str
.replace(/\+/g, '-')
.replace(/\//g, '_')
.replace(/=+$/, ''); // 패딩 제거
}
// URL-Safe Base64 -> 표준 Base64 복원
function fromUrlSafeBase64(urlSafeStr) {
let standard = urlSafeStr.replace(/-/g, '+').replace(/_/g, '/');
while (standard.length % 4 !== 0) {
standard += '='; // 패딩 복원
}
return standard;
}보안 주의사항: Base64는 암호화가 아닙니다
Base64는 시스템 간 안전한 데이터 전송을 위한 인코딩(부호화)에 불과합니다. 키(Key)나 비밀번호 없이 누구나 즉시 원문으로 복원할 수 있습니다. 비밀번호, 개인정보, API 비밀키를 숨기기 위해 Base64를 사용해서는 안 되며, 기밀성이 요구될 때는 반드시 AES-256-GCM 등의 검증된 대칭키 암호화를 사용해야 합니다.
Base64 인코더 / 디코더
무료 온라인 Base64 인코더/디코더. 텍스트, 이미지, URL-Safe Base64 지원. 서버 전송 없는 안전한 변환.