8bit binary 데이터(예를 들어 실행 파일이나, ZIP 파일 등)를 문자 코드에 영향을 받지 않는 공통 ASCII 영역의 문자들로만 이루어진 일련의 문자열로 바꾸는 인코딩 방식을 가리키는 개념입니다.
Base64를 글자 그대로 번역하면 '64진법' 이라는 뜻입니다. 64는 2^6 이며, 2의 제곱수들에 기반한 진법들 중에서 화면에 표시되는 ASCII문자들을 써서 표현할 수 있는 가장 큰 진법입니다. 128 진법에는 128개의 기호가 필요한데 ASCII문자들은 128개가 되지 않습니다.
a-z, A-Z, 0-9 62개의 문자와 나머지 2개 문자를 어떤 기호를 쓰느냐의 차이만 있지만 MIME에서 정의한 나머지 두개의 문자열은 +와 /이며, =는 끝을 알리는 코드로 쓰입니다.
@Base64를 사용하는 이유
플랫폼에 관계없이 독립성을 유지하여 자료의 깨짐 현상을 방지하기 위해 사용됩니다. HTML 파일 혹은 SQL 구문 안에 이진 데이터를 직접 쓸 수 없는 경우 base64로 데이터를 변환해서 사용합니다.
@Base64의 원리
일반적으로 컴퓨터는 1Byte(8bit)를 기준으로 데이터를 표현합니다. 8bit로 표현하는 데이터를 6bit 데이터로 표현하겠다는 원리입니다.
byte 문자열을 8bit와 6bit의 최소 공배수인 24bit 단위로 자르고 다시 6bit씩 잘라서 표현해주는 방법입니다. 기존 데이터보다 30%이상 길어지게 되며 여기에 Encoding, Decoding의 로직까지 추가되므로 성능에도 영향을 끼칠 수 있습니다.
이때, 6bit씩 자른 bit를 10진수로 변환하고 그에 대응하는 값을 Base64 index table에서 찾아서 대입합니다.
@Base64의 인코딩
abc라는 단어를 Base64로 인코딩 한다고 했을 때, 아래와 같이 표현할 수 있습니다.
만약 문자열이 24bit로 딱 떨어지지 않을 경우, 남는 비트에 대해서는 0으로 padding 합니다. 6bit Character 에서는 =로 치환됩니다. 24bit를 넘을 경우 48bit로 수행을 합니다. 이유는 6bit와 8bit에서 딱 맞아 떨어져야 하기 때문입니다.
참고자료
'Computer Science > Programming' 카테고리의 다른 글
Process & Thread (0) | 2023.02.07 |
---|---|
초보자를 위한 Linux 기초 명령어 (0) | 2022.09.25 |
암호화 (0) | 2022.09.15 |
[Programming] Process & Thread (0) | 2021.09.29 |
[Docker] VM과 Container (0) | 2021.09.25 |
댓글