Encoding : Base64 Content-Transfer-Encoding 

Base64 Content-Transfer-Encoding은 임의의 연속된 octet을 사람이 알아볼 수 없는 형식으로 인코딩하도록 설계되었다. 인코딩/디코딩 알고리즘이 단순하면서도 데이터의 크기는 uuencode로 인코드했을 때보다 33%정도만 증가한다. Base64는 사실상 Privacy Enhanced Mail(PEM) 어플리케이션에서 사용하는 방법(RFC 1421 참고)과 동일하다.(단, Base64에는 내재된 텍스트(embedded clear text)에 사용되는 "*"구조가 없다.) 
Base64는 US-ASCII문자중에서 65문자 세트만을 사용한다.(마지막 65번째 문자인 "="는 특수한 기능을 하기위한 문자) 

인코딩하는 과정을 알아보면 먼저 입력되는 비트열을 왼쪽부터 오른쪽 방향으로 24 bit(3 바이트)씩 그룹을 짓고 이렇게 만들어진 3개의 8bit 그룹을 다시 4개의 6bit 그룹으로 나누면 각 6bit 그룹은 64개의 base64 문자 세트에 각각 대응하게 되는 것이다.(단 입력되는 비트열은 MSB(most-significant-bit first)인 것으로 가정한다.) 

각 6bit 그룹은 64개의 문자 배열의 인덱스로 사용된다. 이 문자열 세트는 다음과 같다. 

 0 A     17 R     34 i     51 z

 1 B     18 S     35 j     52 0

 2 C     19 T     36 k     53 1

 3 D     20 U     37 l     54 2

 4 E     21 V     38 m     55 3

 5 F     22 W     39 n     56 4

 6 G     23 X     40 o     57 5

 7 H     24 Y     41 p     58 6

 8 I     25 Z     42 q     59 7

 9 J     26 a     43 r     60 8

10 K     27 b     44 s     61 9

11 L     28 c     45 t     62 +

12 M     29 d     46 u     63 /

13 N     30 e     47 v

14 O     31 f     48 w     (pad) =

15 P     32 g     49 x

16 Q     33 h     50 y


인코딩되어 출력되는 문자열 스트림은 각 라인별로 76 문자를 넘을 수 없으며 line break를 포함하여 위의 표에 나열된 문자들 이외의 모든 문자들은 디코딩 과정에서 무시된다. 

인코딩 과정에서 마지막에 24bit 미만의 데이터만이 남았을 경우에는 특별한 처리를 해주어야 하는데 마지막에 남은 24bit미만의 오른쪽에 0를 덧붙여 24bit로 만들어야 한다. 이 때 마지막의 덧붙여진 0의 bit열은 '='문자로 채워진다.
여기 마지막 부분에서는 오직 다음의 경우만이 발생할 수 있다. 

마지막 입력 스트림이 24bit의 배수인 경우: "="문자를 이용한 padding이 일어나지 않는다. 
마지막에 남은 입력 스트림이 정확히 8bit인 경우: 두 개의 base64 문자와 두 개의 "="문자 
마지막에 남은 입력 스트림이 정확히 16bit인 경우: 세 개의 base64 문자와 하나의 "="문자 
세 개 이상의 연속된 "="로 나타나는 문자열, 예를 들어 "===="와 같은 경우는 무시한다.




Posted by 떼르미
,


자바스크립트를 허용해주세요!
Please Enable JavaScript![ Enable JavaScript ]