Base64 인코딩/디코딩

텍스트와 파일을 Base64로 변환하거나 Base64를 원본 데이터로 복원합니다.

Base64 인코딩
텍스트나 파일을 Base64로 변환
길이: 0 글자크기: 0 바이트

Base64란 무엇인가요?

Base64는 바이너리 데이터를 ASCII 문자열 형식으로 표현하는 인코딩 방식입니다. 이메일 첨부 파일 인코딩, HTML에 이미지 임베딩, XML 또는 JSON에 복잡한 데이터 저장 등 다양한 용도로 사용됩니다.

Base64는 64개의 안전한 문자(A-Z, a-z, 0-9, +, /)만 사용하여 어떤 바이너리 데이터든 텍스트로 변환할 수 있습니다. 이는 다양한 시스템 간에 데이터를 안전하게 전송할 수 있게 해줍니다.

Base64의 주요 용도

  • 이메일 첨부 파일: MIME 프로토콜에서 바이너리 파일을 텍스트로 변환하여 전송합니다.
  • 데이터 URL: HTML, CSS에 이미지나 폰트 등을 직접 삽입할 때 사용합니다 (예: data:image/png;base64,...).
  • API 통신: JSON이나 XML과 같은 텍스트 기반 형식으로 바이너리 데이터를 전송합니다.
  • 쿠키 및 웹 스토리지: 바이너리 데이터나 특수 문자가 포함된 정보를 안전하게 저장합니다.
  • JWT(JSON Web Tokens): 인증 정보를 Base64 인코딩하여 안전하게 전송합니다.

Base64 작동 원리

  1. 바이너리를 ASCII로 변환: Base64는 바이너리 데이터를 ASCII 문자 집합의 64개 문자(A-Z, a-z, 0-9, +, /)를 사용해 텍스트 문자열로 변환합니다.
  2. 인코딩 과정:
    • 바이너리 데이터를 3바이트(24비트) 단위로 나눕니다.
    • 각 3바이트 청크는 4개의 6비트 그룹으로 분할됩니다.
    • 각 6비트 그룹은 Base64 문자 집합의 해당 문자로 변환됩니다.
  3. 패딩:
    • 인코딩할 데이터의 총 비트 수가 6으로 나누어 떨어지지 않으면, 최종 데이터 청크가 Base64 형식에 맞도록 패딩 문자(=)가 추가됩니다.
    • 인코딩할 바이트 수가 3의 배수가 아닌 경우 패딩이 필요합니다. 1바이트가 남으면 == 두 개, 2바이트가 남으면 = 하나가 추가됩니다.
  4. 디코딩:
    • Base64 데이터를 디코딩하려면 프로세스를 역으로 수행합니다: 각 문자를 해당 6비트 이진 값으로 변환합니다.
    • 이 이진 값들을 결합하여 원래의 바이너리 데이터를 재생성합니다.

Base64 예제 분석

"Hello" 문구의 Base64 인코딩 과정을 살펴보겠습니다:

ASCII 값:

H = 72
e = 101
l = 108
l = 108
o = 111

이진 값:

H = 01001000
e = 01100101
l = 01101100
l = 01101100
o = 01101111

이진 데이터 (연결된 비트):

01001000 01100101 01101100 01101100 01101111

6비트 세그먼트로 그룹화:

010010 000110 010101 101100 011011 000110 111100

각 6비트 세그먼트를 Base64 문자로 변환:

010010 = S
000110 = G
010101 = V
101100 = s
011011 = b
000110 = G
111100 = 8(4 비트 남음, = 패딩 추가)

최종 결과:

"Hello"의 Base64 인코딩 결과는 "SGVsbG8="

URL 안전 Base64란?

표준 Base64 인코딩은 + 및 / 문자를 사용하는데, 이는 URL에서 특별한 의미를 가지기 때문에 문제가 될 수 있습니다. URL 안전 Base64는 다음과 같이 이 문자들을 대체합니다:

  • + 기호는 - (마이너스)로 대체
  • / 기호는 _ (밑줄)로 대체
  • 때로는 = 패딩을 생략하여 URL 길이를 더 줄임

이를 통해 URL, 파일명, API 키 등에 Base64 데이터를 안전하게 사용할 수 있습니다.

Base64 사용 시 흔한 실수

  • 인코딩/디코딩 순서 혼동: 데이터를 인코딩한 후 디코딩하면 원본 데이터가 복구됩니다. 순서를 혼동하면 오류가 발생합니다.
  • 패딩 문자 무시: = 패딩 문자는 중요하며, 디코딩 시 필요합니다. 이를 제거하면 디코딩 오류가 발생할 수 있습니다.
  • 바이너리 데이터와 문자열 혼동: 바이너리 데이터를 텍스트로 처리하거나 그 반대로 할 경우 인코딩 문제가 발생할 수 있습니다.
  • 문자 인코딩 혼동: 인코딩 전 원본 문자열의 인코딩(UTF-8, ASCII 등)을 고려해야 합니다.
  • 줄바꿈 문자 무시: 일부 Base64 구현은 76자마다 줄바꿈을 추가합니다. 이는 디코딩 시 제거해야 합니다.