인코딩(encoding)
- 코드화, 암호화
- 어떤 정보를 정해진 규칙(code)에 따라 변환하는 것(en-code-ing)
- 파일에 저장된 정보의 형태나 형식을 데이터 표준화, 보안, 처리속도 향상, 저장공간 절약 등을 위해서 다른 형태로 변환하는 처리 혹은 그 처리방식을 말한다.
- 이메일 등의 전송, 동영상이나 이미지 영역에서 많이 사용된다.
Base64
- 64진법
64 = 2^6, 2의 제곱수에 기반한 진법 중 화면에 표시되는 ASCII 문자들로 표시할 수 있는 가장 큰 진법이다
(128은 화면에 표시되는 ASCII 문자들이 128개가 되지 않는다.) - 이진 데이터를 text로 변경하는 인코딩이다.
- 컴퓨터 분야에서 쓰이는 base64는 8비트 이진 데이터를 문자 코드에 영향을 받지 않는 공통 ASCII 영역의 문자들로만 이루어진 일련의 문자열로 바꾸는 인코딩 방식
- 이진 데이터를 6bit 씩 자른 뒤 6bit에 해당하는 문자를 base64 색인표에서 찾아 치환한다
- 8비트 데이터에서는 텍스트 문자가 아닌 다른 기호나 글씨들이 들어 갈 수 있기 때문에, 이런 것들을 모두 텍스트로 바꿔 주기 위한 방법
출처 : https://ko.wikipedia.org/wiki/%EB%B2%A0%EC%9D%B4%EC%8A%A464
결국 문자열을 64개의 문자로 바꾸는 것이다!
알파벳 대/소문자, 숫자, +, /, = 까지 해서 64문자이다.
'='은 padding 문자라고 하는데 이게 왜 필요하냐?
일반적으로 ASCII 문자나 컴퓨터 데이터는 8비트씩 묶여있는데
base64 인코딩을 하려면 6비트씩 묶어야 한다
그런데 모든 문자열이 남김없이 딱딱 6비트씩 나눠떨어지진 않는다
그렇기 때문에 padding을 주는데 빈공간이 있음을 알려주기 위해 '='를 사용하는 것이다
한번 base64 인코딩을 해보자!
아스키 코드는 아래에서 확인하자
ASCII 코드

1. Man을 변환해보자
ASCII 코드로 변환하고 8bit 이진수 값으로 나타낸다
Text content | M | a | n | |||||||||||||||||||||
ASCII | 77 | 97 | 110 | |||||||||||||||||||||
Bit pattern | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 0 |
8bit 으로 나타낸 값을 6bit로 묶는고 base64 코드로 바꿔주자.
Bit pattern | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 0 |
19 | 21 | 5 | 46 | |||||||||||||||||||||
base64 | T | W | F | u |
그런데 모든 문자열이 이렇게 남김없이 끊어지진 않는다
그런 경우를 변환해보자
2. Many를 변환해보자
M | a | n | y |
||||||||||||||||||||||||||||
77 | 97 | 110 | 121 | ||||||||||||||||||||||||||||
0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 1 |
마찬가지로 6bit로 묶으면 뒤에 2자리가 남게 되는데 남는 비트 공간에 0을 채워 6bit를 만드는 것이다
0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
T | W | F | u | e | Q |
Many-- 저 빈 공간이 있음을 알려주기 위해
패딩문자 '='를 추가하여
TWFueQ== 가 되는 것이다.
초기 문자보다 데이터의 크기가 더 커진다는 단점이 있지만 웹에서 공통적으로 사용될 수 있다는 편리함이 있다.
출처 http://arabiannight.tistory.com/entry/IT%EC%9A%A9%EC%96%B4-Base64-%EB%9E%80
'STUDY > CS' 카테고리의 다른 글
동기 / 비동기 (0) | 2023.01.05 |
---|---|
프로세스/스레드 (0) | 2023.01.05 |
자료구조(해시테이블) (0) | 2023.01.04 |
자료구조 (스택 / 큐, 리스트/배열) (0) | 2023.01.04 |
자료구조 개요 (0) | 2023.01.04 |
댓글