본문 바로가기

CS

Base64 Encoding 이란?

반응형

Base64 Encoding에 정리하기 전에 인코딩 (Encoding) 에 대한 개념에 대한 이해가 있어야 합니다.

0. 인코딩 (Encoding) 이란?

'encode' 의 사전적 의미는 '부호화하다, 표현하다' 라는 의미입니다.

그럼 뭘 표현하고 부호화 한다는 걸까요?

부호화의 대상은 사람이 인지 할 수 있는 형태의 데이터, 이를 테면 문자나 동영상등 입니다. 즉, 인코딩이란

사람이 인지 할 수 있는 형태의 데이터, 이를 테면 문자나 동영상등을 약속된 규칙에 의해 컴퓨터가 사용하는 0과 1로 변환하는 과정 입니다.

그럼 Base64 의미에 대해 궁굼하지 않으신가요?

'Base64' 를 글자 그대로 번역하면 '64진법' 이란 뜻입니다.


Base64 테이블은 위의 이미지와 같습니다.

즉 base64 Encoding 이라는 말의 의미는 'Binary(컴퓨터의 2진수 체계) Data를 Text (인간의 표현 방식)로 표현하는 방법으로 정의할 수 있습니다.


1. Base64 Encoding 변환 과정

변환 과정은 다음과 같습니다.

원본 문자열 -> ASCII 테이블의 8bit 10진수로 변환 -> 6bit 로 자르고 10진수로 변환 -> Base64 테이블의 문자로 변환

여기서 ASCII는 American Standard Code for Information Interchange의 약자로 영어 알파벳을 사용하는 대표적인 문자 인코딩이라고 생각하시면 될것 같습니다.

하나의 예시를 들어서 변환과정에 대해 정리해보겠습니다.

ASCII 테이블은 아래의 링클를 통해 참조해 주세요

 

ASCII Table: Printable Reference & Guide - αlphαrithms

ASCII Table The American Standard Code for Information Interchange (ASCII) is a means of encoding characters for digital communications. It was originally developed in the early 1960s as early networked communications were being developed. A 1969 RFC20 out

www.alpharithms.com


목표 : 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