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로 인코딩하는데, 그 끝부분을 보면 가끔 패딩문자인 =이나 ==으로 끝나는 것을 확인할 수 있음