Base64 인코딩 디코딩

Ena JJJ·2023년 3월 5일
0

Base64

base64를 글자 그대로 직역하면 64진법 이라는 뜻이다. 컴퓨터 분야에서 쓰이는 Base64란 8비트 이진 데이터를 문자 코드에 영향을 받지 않는 공통 ASCII 영역의 문자들로만 이루어진 일련의 문자열로 바꾸는 인코딩 방식을 가리키는 개념이다.
base64는 어떤 문자와 기호를 쓰느냐에 따라 다양한 변종이 있지만, 대부분 처음 62개는 알파벳 A-Z, a-z와 0-9를 사용 하여 마지막 두 개를 어떤 기호를 쓰느냐의 차이만 존재한다.

base64 인코딩 과정은 먼저 24bit의 buffer를 생성하여 위쪽(MSB)부터 바이트 데이터를 넣은 뒤, 버퍼의 위쪽부터 6bit 단위로 잘라 Base64 테이블의 ASCII 문자로 변환한다.
다시말해 원본 문자열 > ASCII binary > 6bit로 cut > base64 encoding 순서가 된다.

☑️ http://www.base64encode.org/


Base64 사용 이유

위의 과정대로 Base64로 인코딩을 하게 되면 6bit당 2bit의 Overhead가 발생(대부분의 컴퓨터는 8bit(1byte)기준으로 데이터를 처리하기 때문)하여 전송해야 될 데이터의 크기가 약 33% 정도 늘어난다. 33%나 데이터의 크기가 증가하고, 인코딩과 디코딩의 추가 연산까지 필요한데 Base64 인코딩을 사용하는 이유는 무엇일까?

통신과정에서 바이너리 데이터의 손실을 막기 위해 사용된다. 플랫폼 독립적으로 Binary Data를 전송할 필요가 있을 때, ASCII로 Encoding 하여 전송하게 되면 여러 가지 문제가 발생할 수 있다.

대표적인 문제는

  • ASCII는 7 bits Encoding인데 8bit 이상의 binary-data가 들어올 때, 일부 데이터가 손실될 수 있다
  • 일부 제어 문자(e.g. Line ending)의 경우 시스템 별로 다른 코드값을 가진다.

위와 같은 문제로 ASCII는 시스템 간 데이터를 전달하기에 안전하지 않다.
Base64는 ASCII 중 제어 문자와 일부 특수문자를 제외한 64개의 안전한 출력 문자만 사용한다 (안전한 출력 문자란 문자 코드에 영향을 받지 않는 공통 ASCII를 의미한다)

즉, Base64는 HTML 또는 Email과 같이 문자를 위한 Media에 Binary Daya를 포함해야 될 필요가 있을 때, 포함된 Binary Data가 시스템 독립적으로 동일하게 전송 또는 저장되는걸 보장하기 위해 사용한다.

0개의 댓글