URL, API 응답, JWT 토큰 내부 등 여러 곳에서 Base64라는 표현을 자주 볼 수 있다. 하지만 단순히 "인코딩 방식" 정도로만 알고 지나치는 경우가 많은 것 같다. 이 글에서는 Base64가 무엇인지, 왜 사용되는지, 그리고 어떻게 쓰이는지까지 정리해보려 한다.
Base64란?
Base64는 이진(binary) 데이터를 텍스트(text) 형태로 안전하게 변환하는 인코딩(encoding) 방식이다. 컴퓨터 안에서 모든 데이터는 0과 1로 이루어진 이진 형태로 저장되지만, 이를 그대로 전송하면 문제가 발생할 수 있는 환경(예: 이메일, 일부 네트워크 프로토콜 등)에서는 텍스트 데이터만 허용되는 경우가 있다.
이때 Base64를 사용하면 이진 데이터를 A~Z, a~z, 0~9, +, / 총 64개의 문자로 변환하여 텍스트 기반 환경에서도 손상 없이 안전하게 전송할 수 있다.
왜 64개 문자일까?
Base64는 이름 그대로 64개의 문자를 사용합니다. 이는 어떤 시스템에서도 깨지지 않고 동일하게 해석될 수 있도록 만든 최소한의 표준 문자 집합이다. 포함되는 문자는 다음과 같다.
A–Z (26개)
a–z (26개)
0–9 (10개)
+ / (2개)
또한 = 는 데이터 길이를 맞추기 위한 패딩(Padding) 문자로 사용된다.
Base64는 암호화? NO!
종종 Base64를 암호화 방식으로 착각하는 경우도 있다. 하지만 Base64는 인코딩(표현 방식 변환)이며, 누구나 쉽게 디코딩할 수 있기 때문에 보안 목적에 사용되기에는 부적합하다.
Base64는 데이터를 "숨기는" 것이 아니라, "전송 가능한 형태로 변환"하는 방법이다.
어디에 사용될까?
| 사례 | 내용 |
| 이메일 첨부 파일(MIME) | 파일을 텍스트로 변환해 손실 없이 전송 |
| JWT 토큰 | 토큰 내부의 Payload 데이터를 문자열 형태로 변환 |
| 웹 이미지 인라인 처리 | <img src="data:image/png;base64,..."> 형식으로 HTML 내에 직접 포함 |
| 네트워크 통신 | API에서 바이너리 데이터를 안전하게 전달 |
Base64 인코딩 과정
아래 문장을 Base64로 변환하면 어떻게 될까?
Hello
1. 먼저 각 문자를 8비트로 변환한다.
| 구분 | 데이터 | ||||
| 문자 | H | e | l | l | o |
| 8bit | 01001000 | 01100101 | 01101100 | 01101100 | 01101111 |
2. Base64는 6bit 단위를 사용하기 때문에 8bit로 된 숫자를 6bit 단위로 나눠준다. 만약에 마지막 단위가 6bit가 안 되면 0으로 패딩한다. 패딩 뒤에는 =을 추가해서 패딩을 나타내고 인코딩 문자열의 길이가 4의 배수가 되도록 보장한다.
010010 000110 010101 101100 011011 000110 1111
010010 000110 010101 101100 011011 000110 111100= // 0으로 패딩해서 6-bit
3. 각 6bit 단위는 0부터 63의 값을 나타낼 수 있고(2^6=64), 아래와 같이 특정 문자와 매핑된다. 그래서 "Hello"를 base64로 인코딩한 값은 SGVsbG8=가 된다.
| 6bit | 010010 | 000110 | 010101 | 101100 | 011011 | 000110 | 111100= |
| 10진수 변환 값 | 18 | 6 | 21 | 44 | 27 | 6 | 60= |
| Base64 문자 | S | G | V | s | b | G | 8= |