2022. 1. 7. 18:23ㆍCS
이번 포스팅에서는 Base64 Encoding에 대해 정리하려고 합니다. 그전에 인코딩 (Encoding)에 대한 개념을 먼저 정리하고 가겠습니다.
1. 인코딩 (Encoding) 이란?
'encode' 의 사전적 의미는 '부호화하다, 표현하다'라는 의미입니다. 그럼 뭘 표현하고 부호화한다는 걸까요?
부호화의 대상은 사람이 인지 할 수 있는 형태의 데이터, 이를 테면 문자나 동영상 등입니다. 즉, 인코딩이란 사람이 인지 할 수 있는 형태의 데이터, 이를 테면 문자나 동영상 등을 약속된 규칙에 의해 컴퓨터가 사용하는 0과 1로 변환하는 과정입니다.
그럼 Base64 의미에 대해 궁굼하지 않으신가요? 'Base64'를 글자 그대로 번역하면 '64진법'이란 뜻입니다.
즉 base64 Encoding는 'Binary(컴퓨터의 2진수 체계) Data를 Text (인간의 표현 방식)로 표현하는 방법으로 정의할 수 있습니다.
1. Base64 Encoding 변환 과정
변환 과정은 다음과 같습니다.
- 원본 문자열을 ASCII 테이블의 8bit 10진수로 변환
- 6bit로 자르고 10진수로 변환
- Base64 테이블의 문자로 변환
여기서 ASCII는 American Standard Code for Information Interchange의 약자로 영어 알파벳을 사용하는 대표적인 문자 인코딩이라고 생각하시면 될 것 같습니다. 하나의 예시를 들어서 변환과정에 대해 정리해 보겠습니다.
Man이라는 문자열을 Base64 인코딩한다.
단계:
1. Man ASCII 테이블의 수로 표현한다. => 19 / 22 / 5
2. 표현한 수를 2진수로 변환한다. => 01001101 / 01100001 / 01101110
3. 전체 bit (01001101 / 01100001 / 01101110)를 6bit로 나눈다. => 010011 / 010110 / 000101 / 101110
4. 각각의 6bit 2진수를 10진수로 변환한다. => 19/ 22 / 5/ 46
5. Base64 테이블의 수를 참고해 문자로 변환한다. => TWFu
결과: Man => TWFu
목표 : a라는 문자를 Base64 인코딩한다.
단계:
1. a ASCII 테이블의 수로 표현한다. => 97
2. 표현한 수를 2진수로 변환한다. => 01100001
3. 전체 bit (01001101)를 6bit로 나눈다. => 011000 / 010000 (다음과 같이 6bit로 자르는데 부족한 부분은 0으로 채운다.)
4. 각각의 6bit 2진수를 10진수로 변환한다. => 24 / 16
5. Base64 테이블의 수를 참고해 문자로 변환한다. => YQ== (base64는 6bit를 4개씩 모아 변환하기 때문에 4개가 안 모아질경우, 빈 공간은 등호 기호(=)로 대체한다.)
결과: a => TQ==
2. Base64 Encoding을 사용하는 이유
그럼 왜 저 일련의 과정들을 거치면서 까지 Base64를 사용할까요?Base 64를 사용하는 가장 큰 이유는 바이너리 데이터를 텍스트 기반 규격으로 다룰 수 있기 때문입니다. 기존 ASCII 코드는 시스템 간 데이터를 전달하기에 안전하지 않습니다. 모든 바이너리 데이터가 ASCII 코드에 포함되지 않으므로 제대로 읽지 못하는 것이죠, 반면 Base64는 ASCII 중 제어 문자와 일부 특수 문자를 제외한 안전한 출력 문자만 이용하므로 데이터 전달에 더 적합합니다.
한 가지 짚고 넘어가야 할 부분은 아래와 같습니다. Base64 Encoding은 암호화가 목적인가?
base 64 인코딩의 결과는 복호화가 거의 불가능합니다 물론 가능성은 전혀 없지만 a, aa, aaa…. 이렇게 모든 경우의 수를 전부 인코딩하고 결괏값을 비교 한다면 가능은 하겠죠 근데 만약 base64결과를 한번더 인코딩 한다면?? 전 안할래요
즉, base64 인코딩은 암호화가 가능합니다. 회원의 비밀번호 정보를 데이터 베이스에 저장할 때 일반적으로 인코딩의 결과값을 저장하고 로그인할 때 입력값의 인코딩한 결괏값과 비교해 일치하다면 로그인을 허락하는 로직을 사용하기 때문입니다.
'CS' 카테고리의 다른 글
MIME 의 개념과 사용 목적 (1) | 2022.01.12 |
---|---|
WEB 서버와 WAS의 차이 (0) | 2022.01.12 |
도메인이란? (0) | 2022.01.06 |
컴파일러와 인터프리터의 차이 (0) | 2022.01.04 |
환경 변수는 왜 설정하는가? (0) | 2022.01.04 |