Base64 Encoding이란?

Encoding이란?

  • 정보의 형태나 형식을 표준화, 보안, 처리 속도 향상, 저장 공간 절약 등을 위해서 다른 형태나 형식으로 변환하는 방식을 말한다.

Base64 Encoding이란?

  • Binary Data를 Text 형태로 변환하는 방식을 말한다.
  • Character set에 영향을 받지 않는 공통 ASCII 영역의 문자로만 이루어진 문자열로 바꾸는 Encoding이다.

왜 Base64를 사용하는가?

  • ASCII는 7 bits Encoding인데 나머지 1bit를 처리하는 방식이 시스템 별로 다르게 처리할 수 있다.
  • 일부 제어문자(Line ending)의 경우 시스템 별로 다른 코드값을 갖는다.
    • ASCII는 시스템간 데이터를 전달하기에 안전하지가 않다.
    • Base64는 ASCII 중 제어문자와 일부 특수문자를 제외한 64개의 안전한 출력 문자만 사용한다.
    • 안전한 출력 문자는 문자 코드에 영향을 받지 않는 공통 ASCII를 의미한다.

How to work?

  • 길이 3인 “ace”를 encode 해보자.
  • ace를 10진수로 변환한다.
    • a= 97, c= 99, e= 101
  • 10진수를 2진수로 변환한다.
    • 97= 01100001, 99= 01100011, 101= 01100101
    • Combined : 01100001 01100011 01100101
  • 6bit 단위로 다시 재정렬한다.
    • 011000 010110 001101 100101
  • 2진수를 다시 10진수로 다시 변환한다.
    • 011000= 24, 010110= 22, 001101= 13, 100101= 37
  • 10진수를 다시 문자열로 변환한다.
    • 24= Y, 22= W, 13= N, 37= l

6bit로 안나눠지는 경우는 어떻게 처리할까?

  • abcd로 예를 들어보자.
    • a= 97, b= 98, c= 99, d= 100
    • 97= 01100001, 98= 01100010, 99= 01100011, 100= 01100100
    • 011000, 010110, 001001, 100011, 011001, 00
      • 비트 4개가 부족한 상황이다.
      • 그렇기 때문에 padding을 진행하여 0000을 추가한다.
      • padding했다는 의미로 ==를 추가한다.
    • 011000, 010110, 001001, 100011, 011001, 000000 ==
    • 011000= 24, 010110= 22, 001001= 9, 100011= 35, 011001= 25, 000000=0 ==
    • 24= Y, 22= W, 9= J, 35= j, 25= Z, 0= A ==
    • “abcd” => “YWJjZA==”

단점은 없을까?

  • Base64 Encoding을 하게되면 전송해야 될 데이터의 양이 늘어난다.
  • Base64 과정에서 Overhead 발생한다.

Reference

0%