사용 방법
- 인코딩할 텍스트를 입력하거나 붙여넣습니다. 원시 바이트를 인코딩하려면 ‘입력 형식’을 ‘16진수’로 바꾸고, 파일을 인코딩하려면 ‘파일 열기’를 클릭합니다.
- 수신 시스템이 다른 문자 인코딩을 요구하지 않는다면 ‘문자 인코딩’은 UTF-8로 둡니다.
- 옵션을 설정합니다. 대부분의 경우 ‘변형’은 ‘표준(RFC 4648)’으로 두고, 수신 측에서 패딩을 원하지 않으면 ‘패딩’을 끄고, 필요할 때는 ‘줄 바꿈’을 ‘76(MIME)’ 또는 ‘64(PEM)’으로 설정합니다.
- 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.is | QmFzZTY0Lmlz |
你好 | 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로 인코딩하려면 어떻게 합니까?
printf '%s' 'your text' | base64를 실행합니다. GNU base64는 기본적으로 76자마다 줄을 바꾸며(한 줄로 출력하려면 -w 0 추가), openssl base64는 64자마다 줄을 바꿉니다(한 줄로 출력하려면 -A 추가).Base64 인코딩은 암호화의 한 종류입니까?
Base64로 인코딩하면 데이터가 얼마나 커집니까?
3바이트마다 4문자가 되고 마지막 묶음은 완전한 묶음으로 올림되므로, 출력은 약 33% 커집니다. MIME 줄 바꿈을 사용하면 76자마다 2바이트(CRLF)가 더 추가됩니다.