base64 인코딩 ,디코딩의 원리

네트워크 2009. 1. 14. 09:59 posted by 무병장수권력자


작성자 : 김문규
최초 작성일 : 2009. 1.14

1. 써보셨나요?
사용해야 할 경우는 참 많겠지만.. 저는 이럴 때 써요.
 - 웹에서 GET 파라미터로 넘길 때
 - 한글 데이터가 이 기종 시스템간 이동하면서 변조되지 않도록 하기 위해서
   (요곤 조금 더 설명이 필요해요.. 다른 포스트에서 다루던가 아님 덧글 주세요.)

2. 그럼 원리는 아시나요?
base64 란 64진수라는 뜻입니다.
즉, base64 인코딩이란, 현재 시스템에서 사용하는 2진수 데이터를 64진수 데이터로 변경해서 표현하겠다는 것이죠.

아시다시피 64는 2^6 이지요. 데이터의 단위를 6bit으로 표현하겠다는 겁니다.
그런데, 일반적으로 컴퓨터는 byte라고 하는 8bit를 기준으로 데이터를 표현하는 것이 일반적입니다.
결론적으로 약간 수학적으로 정리하자면, 8bit으로 표현하는 데이터를 6bit으로 표현하겠다는 것이지요.

그럼 이제 조금만 더 설명해보겠습니다.
아래의 표를 참조하세요.



step1) 먼저 예를 들면 "abc"는 8bit 문자로 구성된 byte 문자열 입력입니다.
step2) 그럼 이 값은 각 문자를 의미하는 8 bit 이진값으로 표현이 됩니다.
step3) 이를 6bit 단위로 다시 구분해 봅니다.
step4) 이를 base64 문자셋으로 변환합니다.
          여기서 base64 문자셋이란 a-z, A-Z, 0-9, +, / 로 이루어진 문자셋입니다.
          A ~ Z : 0 ~ 25
          a ~ z : 26 ~ 51
          0 ~ 9 : 52 ~ 61
          +       : 62
          /       : 63
step5) 만일 딱 떨어지지 않으면 어쩌죠?
BASE64 인코딩은 24bit 단위로 항상 수행합니다. (24는 8과 6의 최소공배수입니다.)
그래서, 남는 비트가 생기면 그 뒤에 6bit character를 0으로 padding 합니다. (예제의 Q로 인코딩 하는..)
그리고나서도 남는 6bit character는 = 으로 치환합니다.




3) 그럼 코드로 만들면 어떻게 될까요?
C로 만든 코드를 구해서 포스팅 했습니다. 확인하세요~
http://www.iamcorean.net/125


'네트워크' 카테고리의 다른 글

HTTP (Hyper-Text Transfer Protocol) 개요  (0) 2008.10.11
LDAP (Lightweight Directory Access Protocol)  (0) 2008.07.16
IPv6  (0) 2008.07.07
SNMP (Simple Netwok Management Protocol)  (0) 2008.07.07