텍스트를 Base64로 변환하는 방법
- 입력 · 텍스트에 문자열을 입력하거나 붙여넣으세요. 공백과 줄 바꿈을 포함해 입력한 그대로 인코딩됩니다.
- Base64는 출력 · Base64에 나타납니다. 버튼 아래의 입력 수치는 텍스트가 몇 바이트가 되었는지 보여 줍니다.
- 값을 디코딩할 시스템이 다른 것을 기대하지 않는 한 문자 인코딩은 UTF-8로 두세요.
- 문자열을 URL이나 토큰에 넣는다면 URL-safe (- _) 와 패딩 없음 (=) 을 켜세요.
- 출력 복사를 누르거나, 다운로드로
base64.txt에 저장하세요.
되돌리려면 Base64를 텍스트로를 쓰거나, 바꾸기를 눌러 여기서 바로 결과를 디코딩하세요.
하나의 문자열, 여러 가지 Base64 값
Base64는 바이트를 인코딩하며, 문자열은 문자 인코딩을 거쳐야 바이트가 됩니다. 그래서 같은 다섯 글자가 네 가지 다른 답을 낼 수 있습니다.
| 문자열 | 문자 인코딩 | 바이트 | Base64 |
|---|---|---|---|
Grüße | UTF-8 | 7 | R3LDvMOfZQ== |
Grüße | Windows-1252 또는 ISO-8859-1 | 5 | R3L832U= |
Grüße | UTF-16LE | 10 | RwByAPwA3wBlAA== |
Grüße | UTF-16BE | 10 | AEcAcgD8AN8AZQ== |
보이지 않는 문자도 계산에 들어갑니다. Hello는 SGVsbG8=, 끝에 공백이 있는 Hello 는 SGVsbG8g, Windows 줄 끝이 붙은 Hello는 SGVsbG8NCg==입니다. 여러 줄 값에서는 줄 끝이 대표적인 함정입니다. line1과 line2를 \n으로 이으면 bGluZTEKbGluZTI=, \r\n으로 이으면 bGluZTENCmxpbmUy가 됩니다. 두 시스템이 같은 값을 두고 다른 결과를 낸다면 먼저 바이트 수를 비교하세요.
Base64 문자열의 길이
입력 3바이트마다 4문자가 되고, 마지막에 남은 1~2바이트 그룹은 =로 4문자를 채웁니다.
| 입력 바이트 | Base64 문자 수 | 예시 (x 반복) |
|---|---|---|
| 1 | 4 | eA== |
| 2 | 4 | eHg= |
| 3 | 4 | eHh4 |
| 4 | 8 | eHh4eA== |
| 10 | 16 | eHh4eHh4eHh4eA== |
즉 문자열은 약 3분의 1 길어지며, UTF-8에서 여러 바이트를 차지하는 ASCII 밖의 문자가 있으면 더 길어집니다. 줄 바꿈한 출력의 정확한 수치는 Base64 크기 오버헤드 페이지에 있습니다.
인코딩한 문자열이 쓰이는 곳
문자열을 Base64로 바꾸는 이유는 대부분 특수 문자를 싫어하는 곳을 통과시키기 위해서입니다.
- 환경 변수와 CI 시크릿: 따옴표,
$, 줄 바꿈이 있는 값은 망가지기 쉽습니다.postgres://app:s3cret@db:5432/app은cG9zdGdyZXM6Ly9hcHA6czNjcmV0QGRiOjU0MzIvYXBw이 되어 이스케이프할 것이 없는 한 줄이 됩니다. - Kubernetes Secret:
data:값은 Base64여야 합니다. Kubernetes Secret 디코더로 다시 읽을 수 있습니다. - HTTP 헤더: 예를 들어
user:password를 인코딩한Authorization: Basic. Basic Auth 헤더 생성기가 헤더 전체를 만들어 줍니다. - 이스케이프 규칙에 방해받지 않고 임의의 텍스트를 담아야 하는 JSON과 XML 필드 (JSON을 Base64로).
이 중 어느 것도 값을 숨기지 않습니다. 문자열을 가진 사람은 누구나 디코딩할 수 있으므로, 인코딩한 시크릿도 일반 시크릿처럼 다루세요. 인코딩과 암호화의 차이를 참고하세요.
코드에서 문자열을 Base64로
import base64
base64.b64encode("Grüße".encode("utf-8")).decode("ascii") # 'R3LDvMOfZQ=='
base64.b64encode("Grüße".encode("cp1252")).decode("ascii") # 'R3L832U='
// Node.js
Buffer.from("Grüße", "utf8").toString("base64"); // "R3LDvMOfZQ=="
Buffer.from("Grüße", "utf16le").toString("base64"); // "RwByAPwA3wBlAA=="
두 언어 모두 문자열을 바이트로 바꾸는 단계를 명시해야 하며, 바로 거기서 문자 인코딩을 고릅니다. 자세한 내용은 Python과 Node.js 페이지에 있습니다.
자주 묻는 질문
문자열을 Base64로 변환하려면 어떻게 하나요?
문자 인코딩(거의 어디서나 UTF-8)으로 문자열을 바이트로 바꾼 다음, 그 바이트를 Base64로 인코딩합니다. 위 도구는 두 단계를 모두 처리하며, Python에서는 base64.b64encode(s.encode("utf-8")).decode()입니다.
같은 텍스트는 항상 같은 Base64가 되나요?
바이트가 같을 때만 그렇습니다. Grüße는 UTF-8에서 R3LDvMOfZQ==이지만 Windows-1252에서는 R3L832U=입니다. 공백이나 줄 바꿈이 하나만 더 있어도 결과가 달라집니다. 한글도 UTF-8과 EUC-KR에서 결과가 다릅니다.
Base64 문자열의 길이는 얼마나 되나요?
입력이 n바이트면 줄 바꿈 전 기준으로 4 × ⌈n / 3⌉자입니다. 10바이트 문자열은 16자가 됩니다. 어떤 길이든 크기 계산기로 계산할 수 있습니다.
Base64 문자열을 설정 파일이나 환경 변수에 넣어도 되나요?
네, 그것이 주된 용도 중 하나입니다. 줄 바꿈과 따옴표가 있는 값도 안전한 문자로 된 한 줄로 바꿔 줍니다. 한 줄로 유지하려면 줄 바꿈을 없음으로 두세요.