[Encoding] BASE64의 개념과 사용 이유
참조 :
[Base 64] Base64이란 무엇일까? / Base64 사용 이유와 인코딩과 디코딩
[Base 64] Base64이란 무엇일까? / Base64의 인코딩과 디코딩 인코딩(encoding)은 파일에 저장된 정보의 형태나 형식을 데이터 표준화, 보안, 처리 속도 향상, 저장 공간 절약 등을 위해서 다른 형태
devuna.tistory.com
BASE64란 무엇인가?
인코딩(Encoding)은 파일에 저장된 정보의 형태나 형식을 데이터 표준화, 보안, 처리 속도 향상, 저장 공간 절약 등을 위해서 다른 형태로 변환하는 처리 혹은 그 처리 방식을 말한다. 이메일 등의 전송, 동영상이나 이미지 영역에서 많이 사용되며, 반대의 의미로 디코딩(Decoding)이 있다.
BASE64는 글자 그대로 64진법이라는 뜻이며, 8비트 바이너리 데이터(예를 들어 실행 파일이나 Zip파일 등)를 문자 코드에 영향을 받지 않는 공통 ASCII 문자로만 이루어진 일련의 문자열로 바꾸는 인코딩 방식을 말한다.
BASE64 인코딩 과정은 먼저 24bit의 buffer(혼란을 줄이기 위해 6과 8의 최소공배수인 24bit)를 생성하여 위쪽(MSB)부터 바이트 데이터를 넣은 후, 버퍼 위 쪽부터 6bit 단위로 잘라서 BASE64 테이블의 ASCII 문자열로 변환한다. 다시 말해서, 원본문자열 > ASCII Binary > 전체 bit를 6bit로 cut > BASE64 encoding 순서가 된다.
예를 들어서, 아래의 그림을 보면 Man이라는 문자열을 BASE64로 encoding하는 과정이다.
Man > 77 / 97 / 110 > 010011 / 010110 / 000101 / 101110 > TWFu
BASE64 Encoding 결과의 마지막에 '='가 붙어있는 경우가 많은데 그 이유는 1byte(8bit)로 되어 있는 문자열을 6bit로 나누어서 Encoding을 진행하게 되는데 혼란을 야기시키지 않기 위해 6과 8의 최소공배수인 24bit의 Buffer를 가지고 Encoding을 진행하게 된다. 때문에 Encoding이 되지 않은 빈 Buffer공간은 '='로 채우게 되어 있다. 아래는 'a'를 입력하였을 때 Encoding하는 과정이다.
Base64 Encode and Decode - Online
Encode to Base64 format or decode from it with various advanced options. Our site has an easy to use online tool to convert your data.
www.base64encode.org
BASE64를 사용하는 이유
- ASCII는 7bit Encoding인데 나머지 1bit를 처리하는 방식이 시스템 별로 상이하다.
- 일부 제어문자(e.g. Line ending)의 경우 시스템 별로 다른 코드값을 가진다.
위와 같은 문제로 ASCII는 시스템 간 데이터를 전달하기에 안전하기 않다.
BASE64는 ASCII 중 제어 문자와 일부 특수문자를 제외한 64개의 안전한 출력 문자만 사용한다.
(안전한 출력 문자란 문자 코드에 영향을 받지 않는 공통 ASCII를 의미)
즉, BASE64는 HTML 또는 Email을 통한 바이너리 데이터 전송 경우, Binary Data가 시스템 독립적으로 동일하게 전송 또는 저장되는 것을 보장하기 위해 사용된다.
BASE64는 XML, JSON, REST API 등 문자열 기반 데이터를 주고 받는 환경에서 multi-form을 다룰 경우 함께 사용된다.