Base64
8비트 이진 데이터를 문자 코드에 영향을 받지 않는 공통 ASCII 영역의 문자들로만 이루어진 일련의 문자열로 바꾸는 인코딩 방식을 말한다.
즉, 0과 1로 이루어진 데이터를 ASCII 문자들의 문자열로 바꾸는 인코딩 방식.
Base64를 그대로 번역하면 64진법이라는 뜻인데, 이는 ASCII문자들을 써서 표현할 수 있는 가장 큰 2의 제곱수이다. 대부분의 경우 A-Z, a-z,0-9 + 기호 2개 로 총 64개의 문자를 사용한다.
Base64 변환
- 24bit 크기의 buffer에 위쪽부터(MSB)부터 3바이트를 집어넣는다. 이때 남은 데이터가 3바이트보다 작으면 패딩문자(=) 삽입.
- 버퍼를 위쪽부터 6bit단위로 단위로 잘라서 ASCII 문자로 변환한다.
MAN 세글자를 인코딩할 때의 과정과 결과
변환표
62,63을 의미하는 + / 는 시스템에 따라 다르게 사용된다.
URL에서 안전하게 사용하기 위해서 -, _ ,= 등을 다른 문자로 사용하는 URL-Safe Base64 도 있다.
사용하는 이유
Base64로 인코딩된 데이터는 원본 이진 데이터보다 크기가 크고 인코딩하는데 overhead가 발생할 수 있다. 근데 왜 사용할까?
이진 데이터를 다루기 어려운 일반 텍스트환경에서 텍스트를 사용해서 안전하게 데이터를 표현할 수 있다. ASCII코드로도 인코딩이 가능하지만 문제점이 있다.
대표적인 예로,
- ASCII 코드는 7bit 인데 나머지 1Bit의 처리 방식이 시스템 별로 상이
- 일부 제어 문자의 경우 시스템 별로 다른 코드 값을 가진다.
Base64는 이런 문제점 없이 데이터를 문자열로 인코딩하여 안전하게 전달할 수 있다.
이 외에도 이메일 첨부 파일 이나 웹에서 이미지 및 멀티 미디어 데이터를 인코딩하고 전송하는데 유용하다 등의 여러 장점이 있다.
즉, Base64는 HTML 또는 Email과 같이 문자를 위한 Media에 Binary Data를 포함해야 될 필요가 있을 때, 포함된 Binary Data가 시스템 독립적으로 동일하게 전송 또는 저장되는 걸 보장하기 위해 사용한다.
사용되는 곳
- 이메일 첨부파일
- 웹 이미지 및 멀티 미디어 데이터
- 데이터 URL
- HTTP 요청 및 응답
- 웹토큰(JWT)(+JWT를 Base64 로 인코딩하는 이유)