Base64 인코딩과 디코딩

인코딩은 파일에 저장된 정보의 형태나 형식을 보안 혹은 처리속도, 표준화, 저장공간 절약등을 위해 데이터를 변환하는 것을 의미한다. 이메일 전송이나 이미지 영역등에 많이 사용되며 이렇게 인코딩된 데이터를 원문으로 복원하는 과정을 디코딩이라한다.

Base64는 글자그대로 직역하면 64진법이라는 뜻이다.

컴퓨터분야에서 사용하는 base64는 8비트 이진데이터를 문자코드에 영향받지 않는 ASCII영역의 문자로만 이루어진 일련의 문자열을 뜻한다.

Base64 변환표

Untitled

Base64 인코딩 과정은 24비트의 버퍼를 생성하여 위쪽(MSB)부터 바이트 데이터를 넣은 뒤, 버터의 위쪽부터 6비트 단위로 잘라 base64 테이블의 ASCII문자로 변환한다.

정리하자면

원본 문자열 > ASCII 바이너리 값 > 6bit로 자름 > base64 인코딩의 순서를 따르게 된다.

따라가보기

Man이라는 세글자를 Base64로 인코딩한다면

Untitled

Man > 77 99 110 > 01001101 01100001 01101110 > TWFu로 변환된다.

Base64를 사용하는 이유

위의 과정대로 Base64인코딩을 하게 된다면 6비트당 2비트의 오버헤드가 발생하게 된다. 무조건 8비트로 변환하기 때문이다. 즉 전송해야 할 데이터의 크기가 약 33%정도 늘어난다는 것이다.

허나 플랫폼 독립적으로 바이너리 데이터를 전송할 필요가 있을때, 아스키코드로 인코딩한다면 여러가지 문제가 발생할 수 있다.

  1. 아스키는 7비트 인코딩 방식으로 1비트를 처리하는 방식이 시스템별로 상이하다
  2. 아스키코드는 일부 제어문자의 경우 시스템별로 다른 코드 값을 가진다.