초기 이메일(SMTP)과 URL 쿼리 등 인터넷 통신 채널은 7비트 ASCII 텍스트만을 전달하도록 설계되었습니다. 이미지, 파일 첨부, 전자 서명과 같은 순수 8비트 바이너리 데이터를 안전하게 전송하기 위해 고안된 것이 바로 Base64 인코딩입니다.
1. Base64란 무엇인가?
Base64는 RFC 4648로 표준화된 인코딩 방식입니다. 임의의 바이너리 바이트 시퀀스를 출력 가능한 64개의 ASCII 문자(대문자 A-Z, 소문자 a-z, 숫자 0-9, 기호 + 및 /)로 안전하게 변환합니다.
2. 3바이트를 4문자로 변환하는 수학적 원리
알고리즘은 입력 데이터를 24비트(3바이트) 단위로 묶은 뒤, 이를 4개의 6비트 묶음(2^6 = 64)으로 나눕니다. 각 6비트 정수값이 64문자 색인 테이블의 인덱스가 됩니다:
입력 3바이트: [01001101] [01100001] [01101110] (24비트 = "Man")
출력 4블록: [010011] [010110] [000101] [101110]
Base64 인덱스: 19 22 5 46
Base64 출력: T W F u => "TWFu"3. 등호(=) 패딩이 필요한 이유
입력 바이트 길이가 3으로 나누어떨어지지 않을 경우, 마지막 6비트 묶음을 맞추기 위해 0 비트를 채우고 끝에 1개 또는 2개의 등호(=)를 패딩으로 붙여 수신 측에서 정확한 원래 길이를 복원할 수 있도록 합니다.
4. URL 안전(URL-Safe) Base64 변형
표준 Base64의 +와 /는 URL에서 예약된 특수 기호입니다. JWT나 OAuth에서 쓰이는 URL-Safe Base64는 +를 -로, /를 _로 치환하고 끝부분의 = 패딩을 생략합니다.
5. "Base64 암호화"라는 흔한 오해
Base64는 절대 암호화가 아닙니다. 비밀키나 수학적 보호 장치가 전혀 없으므로 문자열을 가진 사람은 누구나 즉시 평문으로 복원할 수 있습니다. 비밀번호나 기밀 인증 토큰을 보호하는 용도로 Base64만을 사용해서는 안 됩니다.