728x90
반응형

Binary Data를 Text로 바꾸는 Encoding(Binary-to-Text Encoding schemes)의 하나로써 Binary Data를 Character Set에 영향을 받지 않는 공통 ASCII 영역의 문자로만 이루어진 문자열로 바꾸는 Encoding이다.

Base64를 글자 그대로 직역하면 64진법이라는 뜻이다. 64진법은 컴퓨터한테 특별한데 그 이유는 64가 2의 제곱수 64=2^6이며 2의 제곱수에 기반한 진법 중 화면에 표시되는 ASCII 문자들로 표시할 수 있는 가장 큰 진법이기 때문이다. 

(ASCII에는 제어문자가 다수 포함되어 있기 때문에 화면에 표시되는 ASCII 문자는 128개가 되지 않는다.)

 

핵심은 Base64 Encoding은 Binary Data를 Text로 변경하는 Encoding이다.

 

 

8비트를 6비트로

 

Base64 인코딩은 8비트 바이트들의 연속을 받아서 6비트의 조각의 연속으로 쪼갠 뒤, 각 6비트 조각을 Base64 알바펫으로 이루어진 64개의 글자들 중 하나에 할당한다.

64개의 가능한 출력 글자들은 일반적이고 HTTP 헤더 필드에 놓여도 안전한 것들이다.

64 문자들은 대문자, 소문자, 숫자, +, / 를 포함한다. 특별한 문자 '=' 또한 사용된다.

base64 인코딩이 6비트의 정보를 표현하기 위해 8비트 문자를 사용하기 때문에 base64로 인코딩된 문자열은 원래 값보다 33% 더 커진다

(6bit당 2bit의 Overhead가 발생하기 때문이다.)

 

 

 

base64를 사용하는 이유

 

문자를 전송하기 위해 설계된 Media(Email, HTML)를 이용해 플랫폼 독립적으로 Binary Data(이미지나 오디오)를 전송할 필요가 있을 때, ASCII로 Encoding하여 전송하게 되면 여러가지 문제가 발생할 수 있다.

대표적인 문제는 아래의 2가지이다.

  • ASCII는 7bits Encoding인데 나머지 1bit를 처리하는 방식이 시스템별로 상이하다.

  • 일부 제어문자(Ex. Line Ending)의 경우 시스템 별로 다른 코드값을 갖는다.

 

위와 같은 문제로 ASCII는 시스템간 데이터를 전달하기에 안전하지가 않다.

Base64는 ASCII 중 제어문자와 일부 특수문자를 제외한 64개의 안전한 출력 문자만 사용한다.

(안전한 출력문자는 문자 코드에 영향을 받지 않는 공통 ASCII를 의미한다.)

 

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

 

 

 

참고

https://effectivesquid.tistory.com/entry/Base64-%EC%9D%B8%EC%BD%94%EB%94%A9%EC%9D%B4%EB%9E%80

 

반응형

'Tech' 카테고리의 다른 글

Redis Cluster Proxy (Predixy)  (0) 2020.05.25
Redis Cluster  (0) 2020.05.25
Kafka (카프카)  (0) 2019.04.09

+ Recent posts