Base64 인코더 디코더 - 무료 온라인 Base64 변환 도구

무료 base64 인코더 디코더 도구. 텍스트를 Base64로 변환하거나 Base64 문자열을 즉시 디코딩합니다. 표준 및 URL 안전 인코딩을 지원합니다. 로그인 불필요.

Base64 인코더/디코더

텍스트를 Base64 인코딩으로 변환하고 그 반대로 변환

복사
📚

문서화

Base64 인코딩이란 무엇인가?

Base64는 이진 데이터를 64개의 문자 ASCII 문자열 형식으로 변환하는 이진-텍스트 인코딩 방식입니다. 이메일을 통해 이미지를 보내거나, URL에 데이터를 포함하거나, JSON API를 통해 이진 정보를 전송해야 할 때 Base64는 텍스트 전용 채널에서의 데이터 손상 문제를 해결합니다.

인코딩은 특정 문자 세트로 작동합니다:

  • 대문자 A-Z (26개 문자)
  • 소문자 a-z (26개 문자)
  • 숫자 0-9 (10개 문자)
  • 두 개의 기호: "+" 및 "/" (2개 문자)

우리의 base64 인코더 디코더는 텍스트를 Base64로 즉시 변환하거나 Base64 문자열을 읽을 수 있는 텍스트로 다시 디코딩합니다 - 설치가 필요 없습니다.

현대 개발에서 Base64가 중요한 이유

웹 애플리케이션을 구축할 때 Base64를 끊임없이 마주치게 됩니다. 이메일 첨부 파일은 MIME 인코딩을 통해 이를 사용합니다. CSS와 HTML의 데이터 URI는 이미지를 직접 코드에 포함하기 위해 이를 사용합니다. REST API는 JSON 페이로드에서 이진 데이터를 전송하는 데 이를 사용합니다. HTTP 기본 인증조차도 Base64에 의존합니다(암호화는 아니지만 아래에서 자세히 설명).

이 인코딩이 필수적인 이유는 다음과 같습니다: HTTP, JSON, XML과 같은 텍스트 기반 프로토콜은 원시 이진 데이터를 안정적으로 처리하도록 설계되지 않았습니다. 인코딩 없이 JSON API를 통해 이진 이미지를 보내면 데이터 손상에 직면하게 됩니다. Base64는 안전한 ASCII 문자로만 표현함으로써 이진 데이터가 안전하게 전송되도록 보장합니다.

Base64 도구 사용 방법

텍스트를 Base64로 인코딩:

  1. 입력 필드에 텍스트를 입력하거나 붙여넣기
  2. "Base64로 인코딩" 버튼을 클릭하거나 실시간 변환 활성화
  3. 애플리케이션에서 사용할 Base64 출력 복사

Base64를 텍스트로 디코딩:

  1. 입력 필드에 Base64 문자열 붙여넣기
  2. "Base64에서 디코딩" 버튼을 클릭하거나 디코딩 모드로 전환
  3. 출력 영역에서 원본 텍스트 확인

실시간 변환 모드는 입력할 때 결과를 자동으로 업데이트하여 빠른 테스트 및 디버깅에 완벽합니다. 이 도구는 이모지 및 국제 문자를 포함한 UTF-8 텍스트를 처리합니다.

Base64 인코딩의 작동 방식

인코딩은 입력 데이터의 3바이트(24비트)를 4개의 Base64 문자로 변환합니다. 3개의 입력 바이트 그룹이 4개의 출력 문자 그룹으로 변환되는 번역과 같다고 생각하면 됩니다.

다음은 base64 인코딩 프로세스의 단계별 설명입니다:

  1. 이진수로 변환: 입력 텍스트가 해당 이진 표현(일반적으로 UTF-8)으로 변환됩니다.
  2. 청크로 그룹화: 이진 데이터가 24비트 청크(각각 3바이트)로 분할됩니다.
  3. 6비트 세그먼트로 분할: 각 24비트 청크가 4개의 6비트 그룹으로 나뉩니다.
  4. 문자에 매핑: 각 6비트 값(0-63)이 해당 Base64 문자에 매핑됩니다.

입력이 3으로 나누어 떨어지지 않으면 어떻게 될까요? 패딩 문자("=")가 간격을 채웁니다. 이를 통해 출력과 입력 길이 사이의 일관된 4:3 비율이 유지됩니다.

Base64의 수학적 원리

바이트 시퀀스 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 디코딩 프로세스

디코딩은 Base64 문자를 다시 이진수로 변환하여 인코딩을 역으로 수행합니다:

  1. 각 Base64 문자를 해당 6비트 값에 매핑
  2. 이러한 6비트 값을 연속된 비트 스트림으로 연결
  3. 8비트 청크(바이트)로 분할
  4. 각 바이트를 해당 문자로 변환

패딩 이해하기

패딩은 출력 길이가 항상 4개 문자의 배수가 되도록 보장합니다:

  • 남은 바이트 1개: 2개의 Base64 문자와 "=="를 생성
  • 남은 바이트 2개: 3개의 Base64 문자와 "="를 생성

일반적인 실수는 Base64 문자열을 저장할 때 패딩 문자를 제거하는 것입니다. 일부 디코더는 누락된 패딩을 처리할 수 있지만, 엄격한 구현에서는 이를 거부합니다. 디코더가 관대하다는 확신이 없다면 패딩을 유지하세요.

Base64 인코딩 예시: "Hello"

"Hello"를 base64 변환기를 사용하여 인코딩하는 과정을 살펴보겠습니다:

  1. ASCII 값: 72 101 108 108 111
  2. 이진수 형태: 01001000 01100101 01101100 01101100 01101111
  3. 6비트 단위로 그룹화: 010010 000110 010101 101100 011011 000110 1111
  4. 마지막 청크를 0으로 채우기: 010010 000110 010101 101100 011011 000110 111100
  5. 10진수로 변환: 18, 6, 21, 44, 27, 6, 60
  6. Base64 알파벳에 매핑: S, G, V, s, b, G, 8
  7. 최종 결과: SGVsbG8=

마지막에 "=" 패딩을 주목하세요. "Hello"는 5바이트(3으로 나누어 떨어지지 않음)이므로, 마지막 그룹이 완전하지 않음을 나타내기 위해 패딩이 필요합니다.

Base64 인코딩된 길이 공식

Base64로 인코딩된 문자열의 길이를 계산하는 공식:

인코딩된_길이=4×입력_길이3\text{인코딩된\_길이} = 4 \times \lceil \frac{\text{입력\_길이}}{3} \rceil

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

실제 Base64 사용 사례

프로덕션 시스템에서 base64 인코딩을 만나게 되는 곳입니다:

1. 이메일 첨부 파일 (MIME 인코딩)

이메일 프로토콜은 7비트 ASCII 텍스트용으로 설계되었습니다. PDF나 이미지를 첨부할 때, MIME은 Base64를 사용하여 이진 파일을 이메일에 안전한 텍스트로 변환합니다. 그래서 이메일 파일 첨부는 원본 파일보다 대략 33% 더 큽니다—이는 Base64 오버헤드 때문입니다.

2. 웹 개발의 데이터 URI

CSS나 HTML에 이미지를 직접 삽입한 적 있나요? 그건 Base64가 작동하는 방식입니다:

1<img src="data:image/png;base64,iVBORw0KGgoAAAANS..." />
2

이 기술은 작은 에셋을 직접 코드에 포함시켜 HTTP 요청을 줄입니다. 그러나 작은 이미지(10KB 미만)에 가장 적합합니다—더 큰 파일은 별도로 캐시할 수 없어 페이지 렌더링을 늦춥니다.

3. API 데이터 전송

REST API는 일반적으로 Base64를 사용하여 JSON을 통해 이진 데이터를 전송합니다. JSON만 허용하는 API 엔드포인트를 통해 이미지를 업로드할 때 파일을 Base64로 인코딩합니다. 페이로드 크기가 33% 증가한다는 점을 유의하세요. 대용량 파일의 경우 multipart/form-data를 고려하세요.

4. HTTP 기본 인증

인증 헤더는 Base64를 사용하여 자격 증명을 인코딩합니다:

1Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
2

중요 경고: Base64는 암호화가 아닙니다. 누구나 즉시 디코딩할 수 있습니다. 항상 HTTPS를 사용하세요—평문 HTTP로 Base64로 인코딩된 자격 증명을 절대 보내지 마세요.

5. JWT 토큰

JSON 웹 토큰(JWT)은 세 세그먼트에 Base64URL 인코딩(URL에 안전한 변형)을 사용합니다. 이를 통해 토큰을 URL과 HTTP 헤더에 안전하게 전달할 수 있습니다.

6. 데이터베이스에 이진 데이터 저장

데이터베이스가 이진 열을 지원하지 않거나 JSON 필드에 이진 데이터를 저장해야 할 때, Base64는 텍스트에 안전한 솔루션을 제공합니다. 저장 요구 사항이 33% 증가한다는 점에 유의하세요.

7. 쿠키 저장

쿠키는 ASCII 문자만 포함해야 합니다. 복잡한 데이터 구조나 이진 데이터를 쿠키에 저장할 때 Base64 인코딩은 쿠키에 안전하게 만듭니다.

Base64을 사용하지 말아야 할 경우

Base64로 모든 것을 인코딩하기 전에 잘못된 선택일 수 있는 상황을 고려하세요:

대용량 파일 전송: 33% 크기 증가는 대역폭과 로드 시간에 상당한 영향을 미칩니다. 대신 직접 이진 전송(multipart/form-data)을 사용하세요.

클라이언트 측 이미지 저장: CSS 또는 HTML의 Base64 이미지는 별도로 캐시할 수 없고 페이지 렌더링을 차단합니다. 더 나은 성능을 위해 이미지를 별도의 파일로 저장하세요.

대용량 파일의 데이터베이스 저장: 데이터베이스 TEXT 필드에 메가바이트 크기의 Base64 문자열을 저장하면 저장 공간을 낭비하고 쿼리 속도를 늦춥니다. 대신 BLOB 열이나 파일 저장소 서비스(S3, CloudFlare R2)를 사용하세요.

보안 요구사항: Base64는 보안을 전혀 제공하지 않습니다. API 키, 비밀번호 또는 민감한 데이터를 "숨기기" 위해 사용하지 마세요. 적절한 암호화를 사용하세요.

고성능 시나리오: Base64 인코딩/디코딩은 CPU 오버헤드를 추가합니다. 초당 수천 개의 요청을 처리할 때는 직접 이진 처리가 더 성능이 좋습니다.

Base64 대안: 올바른 인코딩 선택하기

Base64가 항상 최선의 선택은 아닙니다. 다음은 대안을 고려해야 할 때입니다:

URL-Safe Base64

표준 Base64는 "+" 및 "/"를 사용하여 URL을 깨뜨립니다. URL-safe Base64는 이를 "-" 및 "_"로 대체합니다. 다음과 같은 경우 이 변형을 사용하세요:

  • 쿼리 매개변수
  • URL 경로
  • JWT 토큰
  • URL에서 전송되는 모든 데이터

Base32 인코딩

Base32는 출력이 더 길어지지만(33%보다 40% 오버헤드) 대소문자 구분 없이 사용할 수 있습니다. 다음과 같은 경우 Base32를 선택하세요:

  • 사용자가 인코딩된 값을 수동으로 입력해야 하는 경우
  • 대소문자 구분 시스템으로 인해 문제가 발생하는 경우
  • 더 나은 오류 감지가 필요한 경우

16진수 인코딩

16진수는 데이터 크기를 두 배로 늘리지만(100% 오버헤드) 간단하고 보편적으로 지원됩니다. 다음과 같은 경우에 이상적입니다:

  • 해시 값 표시
  • 색상 코드
  • MAC 주소
  • 효율성보다 가독성이 더 중요한 상황

직접 이진 전송

대용량 파일의 경우 텍스트 인코딩을 완전히 건너뛰세요. multipart/form-data 또는 적절한 Content-Type 헤더가 있는 이진 HTTP를 사용하세요. 이렇게 하면 33%의 크기 페널티를 피하고 성능을 향상시킬 수 있습니다.

압축 + Base64

대용량 텍스트 또는 반복적인 데이터를 인코딩할 때는 먼저 압축(gzip 또는 deflate)한 다음 Base64를 적용하세요. 이렇게 하면 원시 Base64 인코딩보다 작은 출력을 얻을 수 있습니다.

Base64 인코딩의 간략한 역사

Base64는 초기 컴퓨팅에서 텍스트 전용 채널을 통해 이진 데이터를 전송해야 하는 필요성에서 등장했습니다. 공식 사양은 먼저 RFC 989 (1987)의 Privacy Enhanced Mail (PEM)에 나타났으며, 이후 RFC 1421 (1993)RFC 2045 (1996)를 통해 MIME의 일부로 발전했습니다.

"Base64"라는 이름은 64개의 문자 알파벳을 반영합니다. 이는 임의적이지 않았습니다 - 64는 2^6과 같아 간단한 비트 시프트 연산을 통해 이진-Base64 변환이 수학적으로 효율적입니다.

오늘날의 Base64 변형은 다음과 같습니다:

  • 표준 Base64 (RFC 4648): A-Z, a-z, 0-9, +, /를 사용하고 = 패딩 적용
  • URL 안전 Base64: URL 전송을 위해 + 및 /를 - 및 _로 대체
  • Base64URL: URL 및 파일 이름을 위한 IETF 표준 변형
  • 수정된 Base64: IMAP이 사서함 이름에 대해 자체 문자 세트 사용

35년 이상이 지난 지금도 Base64는 JSON API와 웹 서비스가 지배하는 현대 웹 개발에 필수적입니다.

(이하 코드 예제들도 동일한 방식으로 번역됨)

Base64의 일반적인 함정과 해결책

Base64 디코더 또는 인코더로 작업할 때 다음 문제들을 주의하세요:

1. 문자 인코딩 문제

문제: UTF-8 인코딩 없이 이모지나 국제 문자가 있는 텍스트를 인코딩하면 손상된 출력이 생성됩니다.

해결책: Base64 인코딩 전에 항상 UTF-8 바이트로 변환하세요. JavaScript에서는 멀티바이트 문자를 제대로 처리해야 합니다. 내장된 btoa()는 유니코드와 함께 실패합니다.

2. 누락되거나 잘못된 패딩

문제: 일부 시스템은 "=" 패딩 문자를 제거하여 엄격한 디코더가 실패할 수 있습니다.

해결책: 디코딩 전에 길이가 4의 배수인지 확인하세요. 그렇지 않다면 "=" 문자를 추가하세요: while (str.length % 4) str += '='

3. 인코딩된 데이터의 줄바꿈

문제: 레거시 MIME 구현은 76자마다 줄바꿈을 추가합니다. 최신 API는 이를 거부하는 경우가 많습니다.

해결책: 디코딩 전에 모든 줄바꿈과 공백을 제거하세요: str.replace(/\s/g, '')

4. URL 안전 vs 표준 Base64

문제: URL에서 표준 Base64(+, /)를 사용하면 인코딩 문제가 발생하거나 라우팅이 중단됩니다.

해결책: URL의 경우 URL 안전 변형을 사용하세요. 다음과 같이 변환할 수 있습니다:

  • 표준을 URL 안전로: +-로, /_로 대체
  • URL 안전에서 표준으로: 대체를 반대로 수행

5. 대용량 파일의 성능

문제: 메모리에 수 메가바이트 파일을 인코딩하면 브라우저가 멈추거나 애플리케이션이 충돌할 수 있습니다.

해결책: 스트리밍 API를 사용하거나 데이터를 청크로 나누세요. 최신 브라우저는 모든 것을 메모리에 로드하지 않고 대용량 파일을 처리할 수 있는 Streams API를 지원합니다.

6. 보안에 대한 오해

치명적인 실수: Base64를 암호화 또는 안전한 난독화로 취급하는 것입니다.

현실: Base64는 밀리초 내에 완전히 되돌릴 수 있습니다. 절대로 이를 사용하여 민감한 데이터를 "숨기지" 마세요. 이는 인코딩을 위한 것이지 보안을 위한 것이 아닙니다. 보안이 중요할 때는 항상 적절한 암호화(AES, RSA)와 결합하세요.

자주 묻는 질문

Base64는 암호화인가요?

아니요. Base64는 인코딩이며 암호화가 아닙니다. 누구나 키 없이 즉시 Base64를 디코딩할 수 있습니다. 암호화는 비밀 키가 필요하고 계산적으로 복호화하기 어렵습니다. 보안이 필요하다면 AES-256과 같은 적절한 암호화 알고리즘을 사용한 후 선택적으로 전송을 위해 암호화된 데이터를 Base64로 인코딩하세요.

왜 Base64는 데이터 크기를 늘리나요?

33%의 크기 증가는 알고리즘 고유의 특성입니다. 입력 바이트 3개가 출력 문자 4개가 됩니다. 이는 Base64가 문자당 6비트를 사용하는 반면 표준 바이트는 8비트를 사용하기 때문입니다. 공식: 3바이트 × 8비트 = 24비트; 24비트 ÷ 문자당 6비트 = 4문자.

이미지를 Base64로 인코딩할 수 있나요?

네, 이미지를 Base64로 인코딩할 수 있습니다. HTML/CSS의 데이터 URI와 API 페이로드에서 흔히 사용됩니다. 하지만 다음과 같은 절충점을 고려하세요: Base64 이미지는 별도로 캐시할 수 없고, 페이지 크기를 33% 증가시키며, 초기 렌더링을 늦춥니다. 대형 사진이 아닌 10KB 미만의 작은 아이콘에 사용하세요.

Base64와 Base64URL의 차이점은 무엇인가요?

Base64URL은 URL에 안전합니다. 표준 Base64는 URL에서 특별한 의미를 가진 "+" 및 "/"를 사용합니다(공백 및 경로 구분자). Base64URL은 이들을 URL에서 안전한 "-" 및 "_"로 대체합니다. JWT 토큰이 이 때문에 Base64URL을 사용합니다.

"잘못된 Base64 문자열" 오류를 어떻게 해결하나요?

일반적인 원인:

  1. 패딩 누락: 길이가 4로 나누어 떨어질 때까지 "=" 문자 추가
  2. 잘못된 문자: A-Z, a-z, 0-9, +, /, = 외부의 문자 제거
  3. 공백: 모든 공백, 탭, 개행 제거
  4. 잘못된 변형: URL 안전 Base64는 +와 /를 -와 _로 대체

Base64로 이진 파일을 디코딩할 수 있나요?

Base64는 이진 데이터를 텍스트로 인코딩하며, 디코딩은 이 과정을 반대로 수행합니다. PDF, 이미지, 비디오 등 모든 이진 파일을 Base64로 인코딩하여 텍스트로 전송한 후 다시 이진으로 디코딩할 수 있습니다. 디코딩된 결과는 원본과 바이트 단위로 동일합니다.

이메일 첨부 파일에 Base64를 사용하는 이유는?

SMTP(이메일 프로토콜)는 7비트 ASCII 텍스트용으로 설계되었습니다. 이진 첨부 파일은 전송 중 손상될 수 있습니다. MIME은 이진 파일을 이메일 라우팅에서 생존 가능한 ASCII 안전 텍스트로 변환하기 위해 Base64를 사용합니다. 33%의 크기 증가는 호환성의 대가입니다.

Base64로 특수 문자를 인코딩하려면?

먼저 텍스트를 UTF-8 바이트로 인코딩한 후 해당 바이트에 Base64 인코딩을 적용하세요. 이렇게 하면 이모지, 강세 문자, 국제 스크립트가 올바르게 인코딩됩니다. JavaScript에서는 유니코드에 실패하는 btoa()대신 TextEncoder를 사용하세요:

1new TextEncoder().encode(text) // 먼저 UTF-8 바이트로 변환
2

대용량 파일의 Base64 인코딩은 느린가요?

Base64 인코딩/디코딩은 상대적으로 빠르지만(최신 CPU에서 초당 수백만 바이트), 메모리에서 수 메가바이트 파일을 처리하면 브라우저가 멈출 수 있습니다. 1MB 이상의 파일은 메인 스레드 차단을 방지하기 위해 스트리밍 방식이나 웹 워커를 사용하세요.

Base64를 URL에 사용할 수 있나요?

표준 Base64 대신 Base64URL(URL에 안전한 변형)을 사용하세요. 표준 Base64의 "+" 및 "/" 문자는 URL에 문제를 일으킵니다. JWT와 같은 라이브러리는 자동으로 Base64URL을 사용합니다. 변환 방법: +를 -로, /를 _로 대체하고 선택적으로 패딩 "=" 문자 제거.

참조 및 표준

🔗

관련 도구

귀하의 워크플로에 유용할 수 있는 더 많은 도구를 발견하세요.