인코딩은 컴퓨터에서 정보를 저장하거나 전송하기 위해 사용되는 변환
이다. 동영상 인코딩의 경우 다양한 장치에서 재생할 수 있는 형태로 변환하는 작업이다. 문자 인코딩은 문자를 0과 1의 나열로 바꾸는 것이다. 예를 들어, 사과
라는 문자는 UTF-8
로 인코딩할 시 1110 1100 1000 0000 1010 1100
(사), 1110 1010 1011 0000 1001 1100
(과)로 나타낼 수 있다.
유니코드 문자를 0과 1의 나열(바이너리 데이터)로 변환하기 위한 문자 인코딩 방식 중 하나이다. 이름 끝에 숫자 8이 있는 이유는, 최소 단위가 8비트
이기 때문이다. 어떤 문자냐에 따라 1바이트 ~ 4바이트짜리
바이너리 데이터로 변환된다. 즉, 가변 길이
문자 인코딩이다. 예를 들어, 위 예시의 사과
는 두 글자 모두 각각 3바이트(24비트)로 변환되었다.
ASCII 인코딩은 UTF-8의 부분 집합
이다. 일반적인 ASCII 문자열은 올바른 UTF-8 문자열이며, 따라서 하위 호환성이 보장된다.
바이너리 데이터를 문자로 바꾸는 인코딩이며, 결과물은 ASCII 문자
로만 이루어진다. Base64라는 이름의 의미는 64진법(=6비트)
인데, 어떤 문자와 기호로 64개를 구성하느냐에 따라 여러 변종이 있지만 잘 알려진 것은 처음 62개는 알파벳 A-Z
, a-z
와 숫자 0-9
를 사용하고 있으며 마지막 두 개를 어떤 기호를 쓰느냐의 차이만 있다. 전자 메일 Base64는 알파벳 대소문자와 숫자, 그리고 +
, /
기호 64개로 이루어지며, =
는 끝을 알리는 코드로 쓰인다.
값 | 문자 | 값 | 문자 | 값 | 문자 | 값 | 문자 |
---|---|---|---|---|---|---|---|
0 | A | 16 | Q | 32 | g | 48 | w |
1 | B | 17 | R | 33 | h | 49 | x |
2 | C | 18 | S | 34 | i | 50 | y |
3 | D | 19 | T | 35 | j | 51 | z |
4 | E | 20 | U | 36 | k | 52 | 0 |
5 | F | 21 | V | 37 | l | 53 | 1 |
6 | G | 22 | W | 38 | m | 54 | 2 |
7 | H | 23 | X | 39 | n | 55 | 3 |
8 | I | 24 | Y | 40 | o | 56 | 4 |
9 | J | 25 | Z | 41 | p | 57 | 5 |
10 | K | 26 | a | 42 | q | 58 | 6 |
11 | L | 27 | b | 43 | r | 59 | 7 |
12 | M | 28 | c | 44 | s | 60 | 8 |
13 | N | 29 | d | 45 | t | 61 | 9 |
14 | O | 30 | e | 46 | u | 62 | + |
15 | P | 31 | f | 47 | v | 63 | / |
즉, Base64 인코딩은 바이너리 데이터를 6비트씩
파싱하여 대응되는 문자로 치환하는 인코딩이다. 예를 들어, Man
을 변환하는 과정은 다음과 같다.
M
은 ASCII(=UTF-8) 바이너리로 표현하면 01001101
이고, 십진법으로 77이다. 위 예시의 경우 8비트 버퍼에 각 문자의 바이너리 데이터를 넣고, 앞에서부터 6비트씩
파싱하여 인덱스를 구하고, 그 인덱스에 대응되는 문자를 Base64 색인표에서 찾은 것이다.
Base64 인코딩은 24비트를 6비트씩 4개로 나누는 과정을 필요로 하는데, 만약 M
한글자만 인코딩할 경우엔 M
이 차지하는 8비트를 제외한 나머지 16비트는 0으로 채운다.
즉, M
한글자를 Base64 인코딩하면 TQAA
가... 되지 않는다. 왜냐하면 입력 데이터의 길이에 따른 패딩 규칙이 있기 때문이다. 패딩은 문자 =
을 사용하며, 패딩 규칙은 다음과 같다.
XX==
(2개의 패딩 문자)XXX=
(1개의 패딩 문자)XXXX
(패딩 없음)따라서, 최종 결과는 TQ==
가 된다.
사실 위 예시들에서 Base64로 인코딩하는 과정에서 이미 UTF-8
인코딩도 함께 수행한 셈이다. 'Man' 또는 'M'이라는 문자를 바이너리 데이터로 변환해야 Base64 인코딩을 할 수 있기 때문이다.
정리하면, 다음과 같다.