Base64 인코딩이란?

해잉·2022년 3월 23일
0

Base64 인코딩

정의

한 줄 요약 : Binary Data를 Text로 변경하는 Encoding

방식

  1. 문자열을 한 문자씩 아스키코드 10진수로 바꾼다.
  2. 10진수를 2진수로 바꾼다.
  3. 2진수들을 한 줄로 나열하여 6비트씩(숫자 6단위씩) 끊어준다.
  4. Base64 표에서 문자로 바꿔준다.

Python Base64 인코딩, 디코딩

인코딩

import base 64
str = "Yejiapsa"
str_bytes = str.encode('ascii')
str_base64 = base64.b64encode(str_bytes)
str_base64_decoded = str_base64.decode('ascii')

디코딩

base64_encoded_str = "TGlmZSBpdHNlbGYgaXMgYSBxdW90YXRpb24u"
base64_bytes_str = base64.b64decode(base64_encoded_str)
str = base64_bytes_str.decode('ascii')

SWEA 1928 Base64 Decoder

SWEA 문제를 풀다가 문제를 이해할 수 없어서 Base64의 개념에 대해 찾다가 알게되었다. Base64의 개념이 모호했다면 문제를 통해 직접 감을 잡아보는 것도 좋을 것 같다.

SWEA BASE64 Decoder

import sys
sys.stdin = open("input.txt", "r")

import base64

T = int(input())
for t in range(1, T+1):
    encoded_str = input()
    str_bytes = base64.b64decode(encoded_str)
    decoded_str = str_bytes.decode('ascii')

    print("#{} {}".format(t, decoded_str))

개발할 때 사용이 되나?

이 개념을 접하고 얼마 지나지 않아 프로젝트에서 사용할 기회가 있었다.
바로 네이버 OCR API를 이용하면서 이미지를 base64 encoding하여 보내줘야했다!

    const OCRdata = {
      images: [
        {
          format: fileFormat,
          name: Date.now().toString(),
          data: fileBase64,
        },
      ],
      requestId: uuidv4(),
      version: 'V2',
      timestamp: Date.now().toString(),
    };

OCRdata에서 fileBase64에 담겨있는 것이 이미지를 숫자로 인코딩한 값이다!

  // 이미지 -> base64 인코딩
  const handleChangeFile = async (event) => {
  	const reader = new FileReader();
    setFileImage(URL.createObjectURL(event.target.files[0])); // 이미지 미리보기

    // 2. 읽기 완료 후 base64 문자열만 분리
    reader.onloadend = () => {
      const base64 = reader.result;
      if (base64) {
      	const dataType = reader.result.split(';base64,')[0];
        setFileFormat(dataType.split('/')[1]); // 데이터 타입 저장
        const base64result = base64.split(',')[1]; // 불필요한 데이터 "," 기준 삭제
        setFileBase64(base64result);
      }
    };

    if (event.target.files[0]) {
      reader.readAsDataURL(event.target.files[0]); // 1. 파일 읽어서 저장
      setFile(event.target.files[0]); // 이미지 저장 (form-data로 보낼 것)
    }
  };

코드가 쪼오금 복잡하지만, 절차 자체는 간단했다.
이미지 파일을 문자열로 변환시키고, 그 값을 저장한다!

[참고]
1. Base64 인코딩이란? 🔗
2. Python Base64 인코딩, 디코딩 변환 방법 🔗

0개의 댓글