🛠️

Whiz Tools

Build • Create • Innovate

Base64 인코더 및 디코더: 텍스트를 Base64로 변환

텍스트를 Base64로 인코딩하거나 Base64 문자열을 텍스트로 다시 디코딩하는 무료 온라인 도구입니다. 표준 및 URL 안전 Base64 인코딩을 지원하며 즉시 변환됩니다.

Base64 인코더/디코더

텍스트를 Base64 인코딩으로 변환하거나 그 반대로 변환합니다

복사
📚

문서

Base64 인코더 및 디코더

소개

Base64는 이진 데이터를 ASCII 문자열 형식으로 표현하는 이진-텍스트 인코딩 방식입니다. 이진 형식으로 저장된 데이터를 텍스트 콘텐츠만 안정적으로 지원하는 채널을 통해 전송할 수 있도록 설계되었습니다. Base64 인코딩은 이진 데이터를 안전하게 텍스트 기반 프로토콜을 통해 전송할 수 있도록 64개의 문자 집합으로 변환합니다(따라서 이름이 붙었습니다).

Base64 문자 집합은 다음으로 구성됩니다:

  • 대문자 A-Z (26자)
  • 소문자 a-z (26자)
  • 숫자 0-9 (10자)
  • 일반적으로 "+"와 "/"인 두 개의 추가 문자 (2자)

이 도구를 사용하면 텍스트를 Base64 형식으로 쉽게 인코딩하거나 Base64 문자열을 원래 텍스트로 디코딩할 수 있습니다. 이는 개발자, IT 전문가 및 텍스트 기반 채널을 통해 안전하게 전송해야 하는 데이터와 작업하는 모든 사람에게 특히 유용합니다.

Base64 인코딩 작동 방식

인코딩 과정

Base64 인코딩은 이진 데이터의 3바이트(24비트) 그룹을 4개의 Base64 문자로 변환하여 작동합니다. 이 과정은 다음 단계로 진행됩니다:

  1. 입력 텍스트를 이진 표현으로 변환합니다(ASCII 또는 UTF-8 인코딩 사용)
  2. 이진 데이터를 24비트(3바이트) 청크로 그룹화합니다
  3. 각 24비트 청크를 4개의 6비트 그룹으로 나눕니다
  4. 각 6비트 그룹을 해당 Base64 문자로 변환합니다

입력 길이가 3으로 나누어 떨어지지 않을 경우, 4:3 비율을 유지하기 위해 "=" 문자를 추가하여 패딩합니다.

수학적 표현

바이트 시퀀스 b1,b2,b3b_1, b_2, b_3에 대해 해당 Base64 문자는 c1,c2,c3,c4c_1, c_2, c_3, c_4로 계산됩니다:

c1=Base64[(b1>>2)]c_1 = \text{Base64}[(b_1 >> 2)]
c2=Base64[((b1&3)<<4)(b2>>4)]c_2 = \text{Base64}[((b_1 \& 3) << 4) | (b_2 >> 4)]
c3=Base64[((b2&15)<<2)(b3>>6)]c_3 = \text{Base64}[((b_2 \& 15) << 2) | (b_3 >> 6)]
c4=Base64[(b3&63)]c_4 = \text{Base64}[(b_3 \& 63)]

여기서 Base64[i]\text{Base64}[i]는 Base64 알파벳의 ii번째 문자를 나타냅니다.

디코딩 과정

Base64 디코딩은 인코딩 과정을 역으로 수행합니다:

  1. 각 Base64 문자를 6비트 값으로 변환합니다
  2. 이러한 6비트 값을 연결합니다
  3. 비트를 8비트 청크(바이트)로 그룹화합니다
  4. 각 바이트를 해당 문자로 변환합니다

패딩

인코딩할 바이트 수가 3으로 나누어 떨어지지 않을 경우 패딩이 적용됩니다:

  • 바이트가 하나 남으면 두 개의 Base64 문자로 변환되고 "=="가 뒤에 추가됩니다
  • 바이트가 두 개 남으면 세 개의 Base64 문자로 변환되고 "="가 뒤에 추가됩니다

예시

텍스트 "Hello"를 Base64로 인코딩해 보겠습니다:

  1. "Hello"의 ASCII 표현: 72 101 108 108 111
  2. 이진 표현: 01001000 01100101 01101100 01101100 01101111
  3. 6비트 청크로 그룹화: 010010 000110 010101 101100 011011 000110 1111
  4. 마지막 청크는 4비트만 있으므로 0으로 패딩합니다: 010010 000110 010101 101100 011011 000110 111100
  5. 십진수로 변환: 18, 6, 21, 44, 27, 6, 60
  6. Base64 알파벳에서 조회: S, G, V, s, b, G, 8
  7. 결과는 "SGVsbG8="입니다

입력 길이(5바이트)가 3으로 나누어 떨어지지 않기 때문에 끝에 "=" 패딩이 있는 점에 유의하십시오.

공식

Base64 인코딩 문자열의 길이를 계산하는 일반 공식은 다음과 같습니다:

encoded_length=4×input_length3\text{encoded\_length} = 4 \times \lceil \frac{\text{input\_length}}{3} \rceil

여기서 x\lceil x \rceil는 천장 함수(가장 가까운 정수로 올림)를 나타냅니다.

사용 사례

Base64 인코딩은 다양한 애플리케이션에서 널리 사용됩니다:

  1. 이메일 첨부 파일: MIME(다목적 인터넷 메일 확장)는 이메일에서 이진 첨부 파일을 인코딩하는 데 Base64를 사용합니다.

  2. 데이터 URL: HTML, CSS 또는 JavaScript에서 작은 이미지, 글꼴 또는 기타 리소스를 직접 포함하는 데 data: URL 스킴을 사용합니다.

  3. API 통신: JSON 페이로드 또는 기타 텍스트 기반 API 형식에서 이진 데이터를 안전하게 전송합니다.

  4. 텍스트 형식으로 이진 데이터 저장: 이진 데이터를 XML, JSON 또는 기타 텍스트 기반 형식에 저장해야 할 때.

  5. 인증 시스템: HTTP의 기본 인증은 Base64 인코딩을 사용합니다(보안이 아니라 인코딩을 위한 것입니다).

  6. 암호화: 다양한 암호화 프로토콜 및 시스템의 일부로, 종종 키 또는 인증서를 인코딩하는 데 사용됩니다.

  7. 쿠키 값: 쿠키에 저장할 복잡한 데이터 구조를 인코딩합니다.

대안

Base64는 널리 사용되지만 특정 상황에서는 더 적합한 대안이 있을 수 있습니다:

  1. URL 안전 Base64: "+"와 "/" 대신 "-"와 "_"를 사용하여 URL 인코딩 문제를 피하는 변형입니다. URL에 포함될 데이터에 유용합니다.

  2. Base32: 32자 집합을 사용하여 출력이 더 길어지지만 가독성이 더 좋고 대소문자를 구분하지 않습니다.

  3. 16진수 인코딩: 16진수로 간단하게 변환하여 크기가 두 배로 증가하지만 매우 간단하고 널리 지원됩니다.

  4. 이진 전송: 대용량 파일이나 효율성이 중요한 경우, 적절한 Content-Type 헤더가 있는 HTTP와 같은 직접 이진 전송 프로토콜이 더 바람직합니다.

  5. 압축 + Base64: 대량의 텍스트 데이터를 위해 인코딩하기 전에 압축하면 크기 증가를 완화할 수 있습니다.

  6. JSON/XML 직렬화: 구조화된 데이터의 경우 Base64 인코딩보다 기본 JSON 또는 XML 직렬화를 사용하는 것이 더 적절할 수 있습니다.

역사

Base64 인코딩은 이진 데이터를 텍스트로 전송해야 했던 초기 컴퓨팅 및 통신 시스템에서 그 뿌리를 찾을 수 있습니다.

Base64의 공식 사양은 1987년 RFC 989의 일부로 처음 발표되었으며, 이는 개인 정보 보호 강화 메일(PEM)을 정의했습니다. 이후 RFC 1421(1993) 및 RFC 2045(1996, MIME의 일부)에서 업데이트되었습니다.

"Base64"라는 용어는 인코딩이 이진 데이터를 표현하기 위해 64개의 서로 다른 ASCII 문자를 사용한다는 사실에서 유래되었습니다. 이 64자 선택은 64가 2의 거듭제곱(2^6)이기 때문에 이진과 Base64 간의 변환이 효율적이도록 의도적으로 이루어졌습니다.

시간이 지나면서 여러 가지 Base64 변형이 등장했습니다:

  • 표준 Base64: RFC 4648에 정의된 대로 A-Z, a-z, 0-9, +, / 및 =를 패딩으로 사용합니다.
  • URL 안전 Base64: URL 인코딩 문제를 피하기 위해 -와 _를 사용하는 변형입니다.
  • 파일 이름 안전 Base64: 파일 이름에 사용하기 위해 설계된 유사한 변형입니다.
  • IMAP을 위한 수정된 Base64: IMAP 프로토콜에서 사용되는 특수 문자 집합이 다른 변형입니다.

30년이 넘는 시간이 지나도 Base64는 현대 컴퓨팅에서 여전히 중요한 도구로 남아 있으며, 특히 JSON과 같은 텍스트 기반 데이터 형식에 크게 의존하는 웹 애플리케이션과 API의 증가와 함께 더욱 그러합니다.

코드 예제

다양한 프로그래밍 언어에서 Base64 인코딩 및 디코딩의 예는 다음과 같습니다:

1// JavaScript Base64 인코딩/디코딩
2function encodeToBase64(text) {
3  return btoa(text);
4}
5
6function decodeFromBase64(base64String) {
7  try {
8    return atob(base64String);
9  } catch (e) {
10    throw new Error("유효하지 않은 Base64 문자열");
11  }
12}
13
14// 예시 사용
15const originalText = "Hello, World!";
16const encoded = encodeToBase64(originalText);
17console.log("인코딩된:", encoded);  // SGVsbG8sIFdvcmxkIQ==
18
19try {
20  const decoded = decodeFromBase64(encoded);
21  console.log("디코딩된:", decoded);  // Hello, World!
22} catch (error) {
23  console.error(error.message);
24}
25

엣지 케이스 및 고려 사항

Base64 인코딩 및 디코딩 작업을 수행할 때 다음과 같은 중요한 고려 사항을 염두에 두십시오:

  1. 유니코드 및 비 ASCII 문자: 비 ASCII 문자가 포함된 텍스트를 인코딩할 때는 Base64 인코딩 전에 적절한 문자 인코딩(일반적으로 UTF-8)을 보장해야 합니다.

  2. 패딩: 표준 Base64는 출력 길이가 4의 배수가 되도록 "=" 문자를 사용하여 패딩합니다. 일부 구현은 패딩을 생략할 수 있지만, 이는 호환성 문제를 일으킬 수 있습니다.

  3. 줄 바꿈: 전통적인 Base64 구현은 가독성을 위해 줄 바꿈(일반적으로 76자마다)을 삽입하지만, 현대 애플리케이션은 종종 이를 생략합니다.

  4. URL 안전 Base64: 표준 Base64는 "+" 및 "/" 문자를 사용하는데, 이는 URL에서 특별한 의미를 가집니다. URL 맥락에서는 "-" 및 "_"를 사용하는 URL 안전 Base64를 사용해야 합니다.

  5. 공백: 디코딩 시 일부 구현은 관대하게 공백을 무시하지만, 다른 구현은 정확한 입력을 요구합니다.

  6. 크기 증가: Base64 인코딩은 데이터 크기를 약 33% 증가시킵니다(3바이트 입력당 4바이트 출력).

  7. 성능: Base64 인코딩/디코딩은 매우 큰 데이터에 대해 계산 집약적일 수 있습니다. 대용량 파일의 경우 스트리밍 접근 방식을 고려하십시오.

참고 문헌

  1. RFC 4648 - Base16, Base32 및 Base64 데이터 인코딩
  2. RFC 2045 - MIME 파트 1: 인터넷 메시지 본문의 형식
  3. MDN 웹 문서: Base64 인코딩 및 디코딩
  4. Base64 - 위키백과
  5. MIME - 위키백과