base64
Base64란?
Base64는 바이너리 데이터를 ASCII 문자로 인코딩하는 방법입니다. 주로 데이터를 **텍스트 기반 프로토콜(예: 이메일, JSON, XML)**로 전송하거나 저장할 때 사용됩니다. 바이너리 데이터를 Base64로 변환하면 데이터를 손실 없이 텍스트로 표현할 수 있습니다.
Base64 인코딩 과정
입력 데이터 변환:
입력 데이터를 8비트 바이너리로 변환.
예: "ABC" ->
01000001 01000010 01000011
비트 그룹화:
데이터를 6비트 단위로 나눔. Base64는 6비트마다 하나의 문자로 매핑됨.
예:
01000001 01000010 01000011
->010000 010100 001001 000011
64개의 문자로 매핑:
각 6비트 값을 Base64 문자 집합으로 변환.
Base64 문자 집합:
예:
010000
->Q
,010100
->U
,001001
->J
,000011
->D
패딩 처리:
입력 데이터 길이가 3의 배수가 아닌 경우, 마지막 6비트 단위의 데이터를 채우기 위해 **패딩 문자("=")**를 추가.
예: "AB" (2바이트) ->
QUJD==
Base64 디코딩 과정
Base64 문자열을 6비트 단위로 변환.
6비트 단위를 8비트로 병합하여 원래의 바이너리 데이터를 복원.
패딩(
=
)은 복원 과정에서 제거.
Base64 변환 과정 예제
Python으로 Base64 변환
결과
Base64 결과는 항상 동일한가?
항상 동일한 결과:
같은 입력 데이터라면 Base64 인코딩 결과는 항상 동일합니다. Base64는 결정적(Deterministic) 알고리즘이기 때문에 동일한 입력 -> 동일한 출력이 보장됩니다.
예: "Hello"를 Base64로 인코딩하면 항상
SGVsbG8=
가 나옵니다.
입력이 다를 경우:
입력 데이터가 조금이라도 다르면 Base64 출력도 완전히 달라집니다.
패딩(
=
):입력 데이터 길이가 3의 배수가 아닌 경우 Base64 출력에
=
가 추가됩니다.예:
"A" ->
QQ==
"AB" ->
QUI=
"ABC" ->
QUJD
URL-Safe Base64:
표준 Base64 문자 집합에서
+
와/
는 URL에서 문제가 될 수 있으므로, 이를 각각-
와_
로 바꾼 URL-Safe Base64도 존재합니다. 이 경우 결과 값은 표준 Base64와 다를 수 있습니다.Python에서는
base64.urlsafe_b64encode
를 사용.
Base64의 단점
출력 크기 증가:
Base64로 인코딩하면 데이터 크기가 약 33% 증가합니다.
이유: 8비트를 6비트 단위로 변환하기 때문.
보안 목적에는 부적합:
Base64는 암호화가 아니며, 단순히 데이터를 변환하는 방법일 뿐입니다. 누구든 Base64 문자열을 디코딩할 수 있습니다.
Base64의 활용 사례
이메일 전송(MIME):
이메일 첨부 파일을 Base64로 인코딩하여 텍스트로 변환한 뒤 전송.
웹 애플리케이션:
이미지나 바이너리 데이터를 JSON이나 XML로 전송할 때 Base64를 사용.
JWT(JSON Web Token):
JWT의 Header와 Payload는 Base64로 인코딩되어 전송됩니다.
데이터 URI:
HTML이나 CSS에서 인라인 이미지를 표현할 때 Base64 데이터 URI를 사용.
Last updated