Base64
바이너리 데이터를 ASCII 문자열로 표현하기 위한 인코딩 방식입니다.
- 문자 세트: Base64 인코딩에 사용되는 문자 세트는 대문자 A-Z, 소문자 a-z, 숫자 0-9, 그리고 '+' 와 '/' 총 64개의 문자로 이루어져 있습니다. 또한, *패딩에 '=' 문자가 사용됩니다.
*패딩: 데이터를 특정 크기나 형식에 맞추기 위해 추가하는 여분의 데이터를 의미 - 작동 방식:
- *바이너리 데이터를 3바이트씩 그룹화합니다. 즉, 24비트의 데이터 블록을 형성합니다.
- 이 24비트 블록을 4개의 6비트 블록으로 나눕니다.
- 각 6비트 블록은 Base64 문자 세트의 하나의 문자에 매핑됩니다.
- 따라서, 3바이트의 바이너리 데이터는 4개의 Base64 문자로 변환됩니다.
- 데이터의 길이가 3의 배수가 아닐 경우, '=' 문자로 패딩됩니다.
*바이너리 데이터: 0과 1로 이루어진 데이터를 의미
- 예시:
- 문자열 "Man"은 바이너리로 **01001101 01000001 01001110**입니다.
- 이것을 6비트씩 나누면 **010011 010100 000101 001110**이 됩니다.
- 이 6비트 값들은 Base64 문자 세트에 따라 T, W, F, **u**로 매핑됩니다.
- 따라서, "Man"은 Base64로 **TWFu**로 인코딩됩니다.
- 활용:
- 바이너리 데이터가 포함된 이메일, 웹 페이지 내 이미지 데이터 (Data URI) 등에서 활용됩니다.
- 단순히 인코딩 방식이기 때문에 보안 기능은 제공하지 않습니다. 즉, Base64는 암호화 방식이 아닙니다.
- 장점:
- 바이너리 데이터를 안전하게 텍스트 포맷으로 전송하거나 저장할 수 있습니다.
- 대부분의 문자 인코딩 스키마와 호환됩니다.
- 단점:
- Base64로 인코딩하면 원래 데이터보다 대략 33% 크기가 커집니다.
- 인코딩/디코딩에는 약간의 오버헤드가 발생합니다.
- 패딩 추가 설명
3바이트 데이터의 인코딩:
- 3바이트의 데이터는 24비트입니다.
- 이 24비트를 4개의 6비트 청크로 나눕니다.
- 각 6비트 청크는 Base64 문자열의 한 문자에 대응됩니다.
- 따라서, 3바이트의 데이터는 항상 4개의 Base64 문자로 인코딩됩니다.
길이가 3의 배수가 아닌 데이터의 처리
- 원본 데이터가 1바이트 또는 2바이트로 끝날 경우, 전체 길이를 3바이트로 만들기 위해 패딩이 필요하게 됩니다.
- 1바이트의 데이터만 있을 경우, 이후 2바이트는 패딩 바이트로 취급되어 Base64 인코딩 시에 2개의 '=' 문자로 표현됩니다.
- 2바이트의 데이터만 있을 경우, 마지막 1바이트는 패딩 바이트로 취급되어 Base64 인코딩 시에 1개의 '=' 문자로 표현됩니다.
- 1바이트 데이터의 경우:
- 예: "A"
- 바이트: 01000001
- 이 8비트 데이터 뒤에 16비트의 패딩이 필요하게 됩니다.
- 6비트로 나눈 후 Base64로 인코딩하면: QQ==
- 2바이트 데이터의 경우:
- 예: "AB"
- 바이트: 01000001 01000010
- 이 16비트 데이터 뒤에 8비트의 패딩이 필요하게 됩니다.
- 6비트로 나눈 후 Base64로 인코딩하면: QUI=
- 3바이트 데이터의 경우:
- 예: "ABC"
- 바이트: 01000001 01000010 01000011
- 추가 패딩은 필요 없습니다.
- 6비트로 나눈 후 Base64로 인코딩하면: QUJD
정리하면 알파벳 대소문자와 숫자를 0과 1로 이루어진 바이너리 데이터로 바꿔주는 것이다.
'오늘 뭐했냐 > 개발에 대한 주저리' 카테고리의 다른 글
23.09.23 B-Tree (0) | 2023.09.23 |
---|---|
23.09.22 Call by reference (0) | 2023.09.22 |
23.09.20 동시성과 병렬성 (0) | 2023.09.20 |
23.09.19 복합 인덱스(Composite Index, Compound Index) (0) | 2023.09.20 |
23.09.18 해시테이블 다시 학습 (0) | 2023.09.19 |