ddood

Base64 Encoding 본문

프로그래밍

Base64 Encoding

ddood 2022. 12. 5. 20:02

Base64 encoding 이해하기


INDEX

1. 인코딩이란?2. Base64란?3. Base64 인코딩 방식4. Base64 패딩5. Base64를 쓰는 이유6. Python으로 Base64 구현

 

 

1. 인코딩(encoding)이란?

데이터 표준화, 보안, 처리 속도 향상, 저장 공간 절약 등을 이유로 다른 형태로 변환시키는 처리 방식을 말한다. 주로 이메일 등의 전송, 동영상이나 이미지 등의 용도로 사용된다. 인코딩의 반대말은 디코딩이다.

 

2. Base64란?

Base64는 앞서 말했던 데이터를 문자로 바꾸는 인코딩의 한 종류로, Base64를 직역하자면 64진법 이란 뜻을 가지고 있다. 64진법을 쓰는 이유는 아스키(ASCII) 코드의 개수인 128개(0~127)를 텍스트로 표현할 수 있는 가장 큰 진법이다. 마찬가지로 64진법은 128개(0~127)의 개수를 표현할 수 있어 아스키코드를 표현하기에 가장 적합하다.

 

Base64 Table/ASCII Table

 

3. Base64 인코딩 방식

문자열을 Base64로 변환하는 방법은 한 문자씩 쪼개어 문자열의 아스키 코드 값을 8bit의 ascii binary로 변환하여 ascii binary끼리 이어 64진수인 6bit 간격으로 쪼갠 후 base64 table의 값을 통해 문자로 바꾼다.

 

4. Base64 패딩

ascii binary는 8bit씩 구성되어 있고, base64는 6bit씩 구성되어 있어 8과 6의 최소공배수읜 24bit씩 ascii 3글자, base64는 4글자로 나누어 계산한다. 하지만 계산을 하다 보면 문제가 생기게 되는데, 24bit에 맞게 떨어지지 않을 때가 있다는 점이다. 이때 남게 되는 bit를 0으로 채운 후, 입력받은 문자가 3의 배수가 되도록 남은 문자를 “=” 문자로 채운다.

 

ex) Mans를 base64로 변환하면, “Mans” = 01001101/01100001/01101110/01110011을 6bit로 나누게 되면 010011/010110/000101/101110/011100/11을 010011/010110/000101/101110/011100/110000로 패딩 후, 변환하고 “Mans”는 3의 배수중 하나인 6이 되기까지 2글자가 더 필요하기 때문에 변환한 문자에 “=”을 2 갤 붙여주면 TWFucw== 값이 나오게 된다.

 

5. Base64를 쓰는 이유

하지만 위와 같이 패딩을 하게 된다면 기존 데이터보다 용량이 더 많아진 것을 확인할 수 있는데, 용량이 더 많아지는데도 base64 인코딩을 사용하는 이유는 무엇일까?

  1. ascii를 인코딩 없이 옮길때 이유가 생기게 되는데, ascii는 7bit Encoding을 사용하고 나머지 1bit를 처리하는 과정이 시스템마다 다르다.
  2. 일반적으로 Line Encoding을 할 때에, 일부 제어 문자들이 시스템마다 다르기 때문이다.

이러한 이유들로 용량을 더 많이 차지하지만, Base64를 통해 표준화를 하여 데이터를 보다 안전하게 옮길 수 있도록 하는 게 Base64를 사용하는 이유이다.

 

6. Python으로 Base64 구현

https://github.com/Jaecho6053/QmFzZTY0

많이 부족한 실력으로 파이썬으로 Base64를 구현해보았다.