Search

Binary-to-text 인코딩(Base64)

Last update: @12/28/2022

Base64란?

바이너리 데이터를 문자표에 대응시킨 binary-to-text 인코딩 방식 중 하나로, 아래와 같은 방법의 인코딩 방식을 말함
8비트 문자열(M a n)을 ASCII 코드표에 따른 이진법으로 바꿈(01001101 01100001 01101110)
6과 8의 최소공배수인 24비트를 맞추기 위해 8비트 문자열 3개씩을 이어붙임(3바이트)
이진수를 6개(6bit)씩 묶으면 총 4개가 묶임(010011 010110 000101 101110)
이 4개 묶음을 Base64 코드표에 따라 문자로 변환함(T W F u)
Base64 코드표 보기
만약 문자열이 2개 또는 1개라면 끝부분을 0과 Padding(=)으로 채워줌
물론 문자라는 것은 컴퓨터가 사람 보기 좋으라고 모니터에 뿌려주는 그림에 불과하기 때문에, 위의 TWFu, TWE=, TQ==도 컴퓨터 내부적으로는 ASCII 문자표에 따른 숫자(코드포인트)로 저장되어 있음
즉, TWFu도 내부적으로는 8비트씩으로 저장이 됨. 이 과정에서 데이터 부피가 커짐
위 과정을 도식화하면 아래와 같음
[🖥️ 보내는 컴퓨터] M a n <- 모니터에서 사람이 보는 문자 01001101 01100001 01101110 <- 컴퓨터 내부에 저장되어 있는 숫자(ASCII) ** 알고리즘이 6비트씩 묶음 ** 010011 010110 000101 101110 ** Base64 문자표 사용 ** T W F u <- Base64에 대응하는 문자 ** ASCII 문자표 사용 ** 01010100 01010111 01000110 01110101 <- 전송할 데이터 (컴퓨터는 알고리즘을 통해 010011 -> 01010100 처럼 직접 바꿀 것이라는 것을 알 수 있음. TWFu는 사람이 이해하기 쉽게 모니터에 뿌려주는 데이터일 뿐) --- 💾 위의 base64 데이터를 네트워크를 통해 전송! --- [🖥️ 받는 컴퓨터] 01010100 01010111 01000110 01110101 <- 수신한 데이터 **ASCII 문자표 사용** T W F u <- ASCII에 대응하는 문자 **Base64 문자표 사용** 010011 010110 000101 101110 <- 컴퓨터 내부에 저장되어 있는 숫자(Base64) **알고리즘이 8비트씩 묶음** 01001101 01100001 01101110 M a n <- 모니터에서 사람이 보는 문자
Plain Text
복사
위의 문자는 말 그대로 문자일 수도 있고, 이미지, 오디오, 비디오 등등 모든 바이너리 데이터가 될 수 있음
유니코드 ASCII 표, ASCII 바이너리 표

단점: 데이터가 커짐

위 방식을 보면 알겠지만 3바이트를 4바이트로 바꿔서 보내기 때문에 전송하는 데이터의 부피가 1/3 만큼 커짐
물론 수신 후 디코딩하면 부피가 다시 줄어듦

Binary-to-text encoding

위 Base64처럼, 이진수를 특정 문자에 매칭시키는 방법을 Binary-to-text encoding이라고 함
굳이 이런 방식을 쓰는 이유가 뭘까? 그냥 이진수로 쭉 보내면 안 될까?
과거부터 email이나 NNTP처럼 인간이 읽을 수 있는 영어 텍스트만 보낼 수 있는 통신 프로토콜이 존재해왔음
이런 프로토콜은 7bit-ASCII만을 전송하게 설계돼있는 등 여러 조건을 종합해보면 데이터를 실어나르는 데는 94개의 인쇄가능한 ASCII 문자만이 안전하다고 볼 수 있음(ASCII 32~127번의 94개 문자)
Base64는 이 94개의 안전한 문자 중 영어 대문자 26개 + 소문자 26개 + 숫자 10개 + 특수문자 2개(+, /) 총 64개를 사용하는 인코딩 방식

UUencode

과거에 사용했던 Binary-to-text encoding 표준 방식
ASCII 자체를 6개로 묶고, 각각 00을 앞에 붙이고, 32(100000(2))를 더해주고 다시 ASCII로 바꾸는 방법을 사용함

MIME(Multipurpose Internet Main Extesions)

UUEncode 방식에서 파일포맷정보를 담을 수 있고 문서 끝 부분 공백이 잘리는 등의 문제를 해결한 방식
MIME에서 사용하는 인코딩 방식을 Base64라고 함

암호 Key

보통 암호 키를 Base64로 인코딩하는데, 그 끝부분을 보면 가끔 패딩문자인 =이나 ==으로 끝나는 것을 확인할 수 있음

References

관련 문서