텍스트와 파일을 Base64로 인코딩

텍스트, 원시 바이트, 모든 종류의 파일을 Base64로 변환합니다. 수신 측이 기대하는 문자 인코딩을 고르고, = 패딩을 유지하거나 생략하고, MIME과 PEM에 맞춰 76자 또는 64자마다 줄을 바꿀 수 있습니다.

브라우저에서만 실행되며 어떤 데이터도 업로드되지 않습니다.

사용 방법

  1. 인코딩할 텍스트를 입력하거나 붙여넣습니다. 원시 바이트를 인코딩하려면 ‘입력 형식’을 ‘16진수’로 바꾸고, 파일을 인코딩하려면 ‘파일 열기’를 클릭합니다.
  2. 수신 시스템이 다른 문자 인코딩을 요구하지 않는다면 ‘문자 인코딩’은 UTF-8로 둡니다.
  3. 옵션을 설정합니다. 대부분의 경우 ‘변형’은 ‘표준(RFC 4648)’으로 두고, 수신 측에서 패딩을 원하지 않으면 ‘패딩’을 끄고, 필요할 때는 ‘줄 바꿈’을 ‘76(MIME)’ 또는 ‘64(PEM)’으로 설정합니다.
  4. Base64 출력을 복사하거나 파일로 다운로드합니다.

Base64 인코딩의 원리

인코더는 입력을 3바이트씩 읽습니다. 이 24비트를 6비트씩 네 묶음으로 나누고, 각 6비트 값(0~63)이 문자 하나를 선택합니다. 0~25는 A-Z, 26~51은 a-z, 52~61은 0-9이고, 마지막 두 값은 +, / 문자입니다. 3바이트가 들어가면 4문자가 나오므로 Base64는 원본 데이터보다 약 33% 커집니다.

Text     M        a        n
Bytes    77       97       110
Bits     01001101 01100001 01101110
6-bit    010011 010110 000101 101110
Index    19     22     5      46
Base64   T      W      F      u

패딩과 출력 길이

입력 길이가 3의 배수가 아니면 마지막 묶음이 불완전해집니다. 남은 바이트가 1개이면 문자 2개 뒤에 ==가 붙고, 2개이면 문자 3개 뒤에 = 하나가 붙습니다. 따라서 입력이 n바이트일 때 패딩을 포함한 출력은 항상 4 × ceil(n / 3)자입니다.

패딩에는 데이터가 담겨 있지 않습니다. JSON Web Token, URL 매개변수, 그리고 많은 API가 패딩을 생략하므로, 수신 측이 패딩 없는 출력을 기대한다면 ‘패딩’을 끄십시오. 링크나 파일 이름에 쓸 값이라면 URL 안전 변형을 선택하거나 Base64URL 페이지를 이용하십시오. 두 방법 모두 +, / 문자를 -, _ 문자로 바꿉니다.

MIME과 PEM을 위한 줄 바꿈

기본 출력은 긴 한 줄이며, JSON, data URI, HTTP 헤더에는 이 형태가 필요합니다. 줄 바꿈이 필요한 형식은 다음 두 가지입니다.

  • MIME, 76자. Content-Transfer-Encoding: base64로 보내는 이메일 첨부 파일은 한 줄이 76자를 넘으면 안 됩니다(RFC 2045). 이 옵션은 MIME 규정에 따라 CRLF로 줄을 끝냅니다.
  • PEM, 64자. -----BEGIN 줄과 -----END 줄 사이에 들어가는 인증서와 키는 한 줄에 64자를 사용합니다(RFC 7468). 이 옵션은 LF 줄 끝을 사용합니다.

문자 인코딩과 파일

Base64는 글자가 아니라 바이트를 인코딩하므로, 텍스트는 먼저 문자 인코딩에 따라 바이트로 변환됩니다. 예를 들어 é는 UTF-8에서는 2바이트이지만 ISO-8859-1이나 Windows-1252에서는 1바이트이므로, 같은 텍스트라도 Base64 결과가 달라집니다. 웹, JSON, 그리고 거의 모든 최신 API에는 UTF-8이 올바른 선택입니다. EUC-KR, GBK, Shift_JIS, Windows-1251 같은 다른 문자 인코딩은 레거시 시스템에 맞춰야 할 때만 선택하십시오.

파일은 문자 인코딩 변환 없이 저장된 그대로 인코딩됩니다. 바로 쓸 수 있는 HTML과 CSS 코드 조각이 필요한 이미지는 이미지 Base64 변환 도구를, 감지된 MIME 유형이 포함된 data URI가 필요하면 파일 Base64 변환 도구를 사용하십시오.

사양

알파벳A-Z a-z 0-9 + /
출력 크기3바이트당 4문자(약 133%)
패딩= 문자로 4의 배수 길이까지 채움
표준RFC 4648 4절
대소문자 구분예

예시

입력 (UTF-8)출력
Hello, World!SGVsbG8sIFdvcmxkIQ==
Base64.isQmFzZTY0Lmlz
你好5L2g5aW9

자주 묻는 질문

다른 인코더와 Base64 결과가 다른 이유는 무엇입니까?
거의 항상 입력 바이트가 다르기 때문입니다. 흔한 원인은 끝에 붙은 줄 바꿈 문자(셸 명령 echo는 줄 바꿈 문자를 하나 추가하므로 printf '%s' 또는 echo -n을 사용하십시오), 서로 다른 문자 인코딩, 텍스트에 포함된 Windows 줄 끝, 또는 서로 다른 패딩·알파벳·줄 바꿈 설정입니다. 같은 바이트를 같은 옵션으로 인코딩하면 결과는 항상 같습니다.
JavaScript에서 유니코드 텍스트를 Base64로 인코딩하려면 어떻게 합니까?
btoa()는 U+00FF까지의 문자만 받으며 그 밖의 문자에는 오류를 발생시킵니다. 먼저 문자열을 UTF-8 바이트로 변환하십시오. 예를 들면 btoa(String.fromCharCode(...new TextEncoder().encode(str)))와 같습니다. Node.js에서는 Buffer.from(str, 'utf8').toString('base64')를 사용합니다.
명령줄에서 Base64로 인코딩하려면 어떻게 합니까?
Linux나 macOS에서 printf '%s' 'your text' | base64를 실행합니다. GNU base64는 기본적으로 76자마다 줄을 바꾸며(한 줄로 출력하려면 -w 0 추가), openssl base64는 64자마다 줄을 바꿉니다(한 줄로 출력하려면 -A 추가).
Base64 인코딩은 암호화의 한 종류입니까?
아니요. Base64에는 키가 없으며 누구나 Base64 디코더로 원래대로 되돌릴 수 있습니다. Base64는 정보를 숨기기 위한 것이 아니라, 텍스트만 허용하는 채널로 바이너리 데이터를 전달하기 위해 존재합니다.
Base64로 인코딩하면 데이터가 얼마나 커집니까?

3바이트마다 4문자가 되고 마지막 묶음은 완전한 묶음으로 올림되므로, 출력은 약 33% 커집니다. MIME 줄 바꿈을 사용하면 76자마다 2바이트(CRLF)가 더 추가됩니다.