DevUtils
기술 가이드
인코딩 & 암호학4분 읽기

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 비율)를 수반합니다.

TEXTDevUtils Code Reference
원본 문자열: '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 인코딩을 피하기 위해 끝의 = 패딩을 제거합니다.

JAVASCRIPTDevUtils Code Reference
// 표준 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인코딩바이너리웹 표준데이터 URL
실시간 온라인 도구 바로가기

Base64 인코더 / 디코더

무료 온라인 Base64 인코더/디코더. 텍스트, 이미지, URL-Safe Base64 지원. 서버 전송 없는 안전한 변환.

도구 실행하기