티스토리 뷰




이번 포스팅은 인코딩과 디코딩에 널리쓰이는 방법 중 하나인 Base 64에 대해 다뤄보겠습니다.


실행파일이나 zip 파일 등의 8비트 이진 데이터를 ASCII 영역의 문자들로만 이루어진 일련의 문자열로 바꾸는 인코딩 방식을 Base 64 라고 합니다.


Base 64 를 직역하면 64진법이라는 뜻인데, 64진법의 경우 2의 6승으로 2의 제곱수 에 기반한 진법 중 ASCII 문자들로 표시할 수 있는 가장 큰 진법이기에 특별합니다.

(출처 : 위키백과 https://ko.wikipedia.org/wiki/%EB%B2%A0%EC%9D%B4%EC%8A%A464)


이 Base 64 Encoding 방식에 대해 간략하게 설명하면 이진 데이터를 6bit 씩 자르고 6bit에 해당하는 문자를 아래와 같은 Base64 색인표에서 찾아 바꿔주는 방식입니다.


(출처 : http://www.4dgraphix.com/blog/base-64-encoding/)


예를 들어 ABC라는 문자열에 대해 Base 64 Encoding을 진행해본다면 아래와 같은 절차를 거쳐 인코딩 된 값인 QUJD를 받을 수 있습니다.




거치는 단계를 자세히 나타내면 아래와 같습니다.


1. 입력 받은 문자열을 문자 단위로 분해합니다.


2. 분해한 문자를 ASCII 코드로 바꿔줍니다.


3. ASCII 코드를 8bit 이진 데이터로 변환해줍니다.


4. 8bit 이진 데이터를 6bit 단위로 끊어 줍니다.


5. Base 64 Index Table에서 6bit에 해당되는 문자를 찾아 치환하여 줍니다.



하지만 Base 64 Encoding은 24bit 단위(문자 3개 x 8bit)가 아닐 때는 추가로 한 단계를 더 거쳐야 합니다.



A라는 문자 하나를 넣었을 때(문자가 3n개가 아닐 때, 24bit 단위를 충족하지 못했을 때)는 QQ==로 인코딩된 것을 알 수 있습니다.


= 문자의 경우 Base 64 Encoding Index Table에는 없는 문자로, =는 bit 수를 맞춰주기 위해 0으로 채워주는 패딩(Padding)입니다.


결론적으로 문자열의 수가 3n 개 일 때는 =이 존재하지 않고, 3n+1 개 일 때는 = 두 개, 3n+2 개 일 때는 = 하나임을 알 수 있습니다.



오늘 포스팅한 Base 64 Encoding에 대해 정리해보면 아래와 같습니다.


1. 입력 받은 문자열을 문자 단위로 분해합니다.


2. 분해한 문자를 ASCII 코드로 바꿔줍니다.


3. ASCII 코드를 8bit 이진 데이터로 변환해줍니다.


4. 8bit 이진 데이터를 6bit 단위로 끊어 줍니다.


5. Base 64 Index Table에서 6bit에 해당되는 문자를 찾아 치환하여 줍니다.


6. 문자열 개수와 Padding


 문자열이 3n개 일 때

 = Padding 없음

 문자열이 3n+1개 일 때

 = Padding 두 개 

 문자열이 3n+2개 일 때

 = Padding 한 개 


이렇게 Base 64 Encoding에 대해 알아보고 포스팅을 끝내겠습니다.


다음 포스팅에서 뵈요 :)

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함