카테고리 없음

Base64란?

꿀쥐 2025. 10. 25. 20:55

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=