모르는게 많은 개발자

Base64 인코딩 개념/과정 본문

알아가는 개발

Base64 인코딩 개념/과정

Awdsd 2020. 6. 13. 02:29
반응형

base64를 인코딩 과정을 질문 받은적이 있다. 정말 아무 생각 없이 64개의 문자가 있으니 64진법 계산하듯이 나오면 된다라는 어처구니 없는 답변을 했다. 이후 내가 얼마나 무식한 답변을 했는지 깨달았고, 인코딩 과정을 공부? 알아본 계기가 되었다.


1. Base64란?

Base64는 사전적 의미로 8비트 이진 데이터를 문자 코드에 영향을 받지 않는 공통 ASCII 영역의 문자들 64개로 이루어진 일련의 문자열로 바꾸는 인코딩 방식을 가리키는 개념이다.

 

간단히 설명하면

아스키 코드표와 base64표

문자열을 아스키 코드에 있는 대문자, 소문자, 숫자, +, /로 이루어진 문자열로 변환된 문자열이다. Base64 인코딩은 변환하는 작업을 말한다.


2. Encoding 과정

ASCII문자는 1Byte로 이루어져 있다.

근데 여기서 의문점이 들 수 있다. ASCII코드는 128개의 문자인데 그럼 7bit로도 표현가능하지 않냐? 1Byte를 사용하는 이유는 1bit를 에러 검출 용도로 쓰이기 때문이다. 이걸 Parity Bit라 부른다.

인코딩

인코딩을 할 때 먼저 24bit(3Byte)의 Buffer를 생성한다. 

일단 "Man"이라는 문자열을 base64로 인코딩해보자.

각 문자는 ASCII코드에서 다음과 같은 값을 가지고 있다.

  • M : 77   
  • a : 97   
  • n : 110

이 값을 2진수로 나열하면 위와 같이 표현된다.

  1. 나열된 2진수를 6Bit 단위로 나눈다.
  2. 나눈 6Bit의 값들을 표현한다.
  3. 값에 맞는 문자들을 Base64표에서 찾아 표현.
  4. 위의 결과로는 "Man"를 Base64로 인코딩하면 "TWFu"가 출력된다.
Padding

위와 같은 경우는 24Bit에 1Byte(8Bit)문자열이 3개들어가 Buffer에 딱맞게 들어갔을 때 변환이다.

만약 1글자를 변환하면 어떻게 해야할까?

위와 같이 "M"을 인코딩하면 맨끝에 01이 남게된다. 이럴경우 나머지 4자리에 0을 채워 6비트로 채워주고 문자를 표현한다. 그리고나면 버퍼에는 나머지 12Bit가 비워져있는데 이곳을 Padding문자인 '='을 추가한다. 그럼 6Bit씩 2개이므로 '='이 2개가 추가되는 것이고 최종 인코딩 결과는 'TQ=='이 된다.

 

만약 문자가 4개라 32Bit가 된다면 버퍼는 48Bit가 생성되고 과정을 진행한다.

예를 들어 'sure'라는 문자열을 인코딩하면 8 * 4 = 32Bit를 6으로 나누면 5와 2Bit가 남는다. 그럼 적어도 6글자에게 12비트가 Padding 으로 들어가기때문에 마지막에 '=='이 들어가게 될 것이다. (48 - (6 * 6) = 12)

'sure'의 인코딩값은 'c3VyZQ=='이 나오게 된다.


참고

https://ifuwanna.tistory.com/72

반응형

'알아가는 개발' 카테고리의 다른 글

[NoSql] SpringBoot, Redis 연동 예제  (0) 2020.07.29
[NoSql] Redis 개념/특징  (0) 2020.06.14
REST란 무엇일까?  (0) 2020.05.14
TCP/UDP 특징 총정리  (0) 2020.05.05
[양방향 암호화] 대칭키 암호화  (0) 2020.04.22
Comments