Base64

옥영진·2020년 11월 18일
0

Base64는 바이너리 데이터를 아스키 코드 일부와 일대일로 매칭되는 문자열로 단순 취환하는 인코딩 방식이다.

Base64를 사용하는 이유

Base64 인코딩 방식을 사용하는 이유는 바이너리 데이터를 문자 코드에 영향을 받지 않는 공통 64개의 아스키 문자로 이루어진 텍스트 기반 데이터로 다룰 수 있기 때문이다. JSON과 같은 텍스트 기반 데이터에 이미지 파일을 포함시키려 할 때, 바이너리 형식인 이미지 파일을 Base64로 인코딩하여 텍스트 기반의 JSON에 포함시켜 이를 사용할 수 있게 된다.

Base64 인코딩 과정

  1. 인코딩하고자 하는 데이터를 비트로 변환하여 나열한다.
  2. 비트 배열이 24비트(3바이트)로 정확히 나눠떨어지는지 확인한다.
  3. 정확히 나눠떨어지지 않는다면 끝에 3바이트가 될 때까지 0을 추가한다. 추가된 바이트 개수만큼 패딩(=)을 추가해야 한다.
  4. 나열된 비트들을 6개씩 나눠 10진수로 변환한다. (6비트로 표현할 수 있는 수의 범위는 0~63)
  5. 변환한 숫자를 아스키 코드 글자로 변경하고, 3번에서 추가된 바이트 개수만큼 끝에 패딩(=)을 추가하면 인코딩 완료.

패딩을 추가하는 이유

데이터 길이를 명시적으로 구분할 수 있는 JSON이나 HTTP 메시지 바디와 같은 곳에서는 패딩이 무조건 필요한 건 아니지만, TCP처럼 스트림 형태로 데이터를 주고받는 환경에서는 어디까지의 데이터를 디코딩 해야하는지 길이를 알아야 하기 때문에 패딩을 추가해야 한다.

Base64 디코딩 과정

  1. 인코딩 된 문자들을 모두 비트 형태로 변환한다.
  2. 8비트(1바이트)로 나눠서 이를 원래 문자로 변환한다.

URL-Safe Base64

Base64로 인코딩 된 문자열을 URL에 포함시켜야 할 때가 있을 수 있다. 이러한 상황에서는 URL 주소에서 사용할 수 없는 문자들을 다른 문자들로 치환하여 사용해야 한다.

  • + -> -
  • / -> _
  • = -> . (URL 주소는 길이를 알기 때문에 패딩을 생략한다.)
profile
안녕하세요 함께 공부합시다

0개의 댓글