base64 개념

 

 

base64는 데이터를 64종류의 인쇄 가능한 숫자만을 이용하여 인코딩하는 방식으로, 그 외의 문자를 처리할 수 없는 통신 환경에서 멀티바이트 문자나 이진 데이터를 처리하는 것을 목적으로 한다. A-Z, a-z, 0-9까지의 62개 문자와 +, /의 2가지 기호가 사용되며, 남은 부분을 포장하기 위한 패딩(padding)을 위해 = 기호가 사용된다.

 

 

 

base64 인코딩 원리

 

 

1. 문자열을 ASCII의 십진수로 변경한다.
2. 십진수를 8bit에 맞춰서 이진수로 표현한다.
3. 수치를 6bit 단위로 자른다. 뒤에 부족한 부분은 6bit를 맞추기 위해 0으로 채워넣는다.
4. 6bit의 이진수를 십진수로 변환한다.
5. 십진수를 base64 table의 문자로 변경한다.
6. base64는 24bit 그룹 수를 가지기 때문에 총 bit의 수를 24의 배수에 맞추어야 한다. 남은 부분을 포장하기 위한 패딩(padding)을 위해 = 기호가 사용된다. 원 문자열의 비트수 %3만큼 = 기호를 붙여준다.

 

 

 

base64 인코딩 예시

 

 

원리만 적어놓으면 이해하기 힘든 부분도 있을 수 있으니, 'ARGOS'로 예시를 들어 base64 인코딩을 해보았다.

 

1. 문자열을 ASCII의 십진수로 변경한다.

위의 아스키코드 표를 통해 ARGOS를 십진수로 변경하면, 각각 65 82 71 79 83이 된다.

2. 십진수를 8bit에 맞춰서 이진수로 표현한다.

위에서 나온 65 82 71 79 83을 8bit에 맞춰서 이진수로 변경하면, 각각 01000001 01010010 01000111 01001111 01010011이 된다.

3. 수치를 6bit 단위로 자른다. 뒤에 부족한 부분은 6bit를 맞추기 위해 0으로 채워넣는다.

위에서 나온 01000001 01010010 01000111 01001111 01010011를 6bit 단위로 자르면, 각각 010000 010101 001001 000111 010011 110101 0011이 나온다. 뒤에 0011은 4bit밖에 되지 않으므로, 6bit를 맞추기 위해 0으로 채워넣는다. 즉, 010000 010101 001001 000111 010011 110101 001100이 된다.

4. 6bit의 이진수를 십진수로 변환한다.

위에서 나온 010000 010101 001001 000111 010011 110101 001100를 십진수로 변환한다. 각각 16 21 9 7 19 53 12이 된다.


5. 십진수를 base64 table의 문자로 변경한다.

위의 base64 table을 통해 위에서 나온 16 21 9 7 19 53 12을 문자로 변경한다. 각각 Q V J H T 1 M이 된다.

 

6. base64는 24bit 그룹 수를 가지기 때문에 총 bit의 수를 24의 배수에 맞추어야 한다. 남은 부분을 포장하기 위한 패딩(padding)을 위해 = 기호가 사용된다. 원 문자열의 비트수 %3만큼 = 기호를 붙여준다.

위의 Q V J H T 1 M은 42bit이므로, 24의 배수인 48bit에 맞추어 6bit를 패딩 한다. 즉, 원 문자열의 비트수인 40%3인 1만큼 뒤에 = 기호를 붙여준다. 즉, 결론적으로 ARGOS를 base64로 인코딩하면 QVJHT1M=가 나오게 된다. 확실성을 위하여 base64 인코딩 사이트에서 확인해보았다.

 

이를 표로 만들면 다음과 같다.

 

 

 

 

 

 

Create by harnag_25

 

 

 

참고

http://terms.naver.com/entry.nhn?docId=3440158&cid=40942&categoryId=32828

http://cattool.tistory.com/9

http://blog.naver.com/jae1zzang/220163588084

http://blog.naver.com/fjrzlgnlwns/220018324874

http://coderstoolbox.net/string/#!encoding=base64&action=encode&charset=us_ascii

'WEB > Web' 카테고리의 다른 글

Proxy 서버와 조작  (0) 2017.12.18
페이지 이동 Loction.href  (0) 2017.11.20
base64  (0) 2017.11.06
자바스크립트 용어  (0) 2017.10.28
아스키 코드(ASCII)  (0) 2017.10.16
javascript indexOf 함수와 lastindexOf 함수  (0) 2017.09.25

+ Recent posts