Base64 인코더/디코더
텍스트 및 파일 변환을 지원하여 Base64 문자열을 빠르게 인코딩 및 디코딩합니다
Base64란 무엇인가요?
Base64는 64개의 인쇄 가능한 ASCII 문자를 사용하여 바이너리 데이터를 나타내는 인코딩 방식입니다. 이러한 문자에는 대문자와 소문자, 숫자 및 일부 특수 기호가 포함됩니다. Base64는 이메일 첨부 파일 및 URL 매개변수와 같이 텍스트 전용 채널을 통해 바이너리 데이터를 전송해야 하는 시나리오에서 널리 사용됩니다. Base64 인코딩 방식은 원래 RFC 4648 및 MIME 사양 (RFC 2045)에서 정의되었습니다.
Base64 인코딩 알고리즘 원리:
Base64 인코딩 프로세스는 다음 단계로 나눌 수 있습니다:
- 입력 데이터를 각 3바이트씩 그룹으로 분할합니다
- 이 3바이트(24비트)를 각각 6비트씩 4개 그룹으로 재배열합니다
- 각 6비트 값(범위 0-63)을 Base64 문자 집합에 대한 인덱스로 매핑합니다
- 마지막 그룹이 3바이트보다 적으면 0비트로 채우고 결과 끝에 해당 개수의 등호(=)를 패딩으로 추가합니다
Base64 문자 집합: A-Z, a-z, 0-9, +, /
패딩 문자: =
변환 예제:
텍스트 "Man"의 ASCII 코드: 77 97 110
이진 표현: 01001101 01100001 01101110
6비트로 재그룹화: 010011 010110 000101 101110
십진수 값: 19 22 5 46
Base64 결과: T W F u
간소화된 JavaScript 구현:
// Base64 encoding implementation example (simplified)
function base64Encode(str) {
// Base64 character set
const base64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
let result = '';
let i = 0;
// Process every 3 characters as a group
while (i < str.length) {
const char1 = str.charCodeAt(i++);
const char2 = i < str.length ? str.charCodeAt(i++) : 0;
const char3 = i < str.length ? str.charCodeAt(i++) : 0;
// Convert 3 8-bit bytes into 4 6-bit indices
const triplet = (char1 << 16) + (char2 << 8) + char3;
// Extract 4 6-bit values from the triplet
const index1 = (triplet >> 18) & 0x3F;
const index2 = (triplet >> 12) & 0x3F;
const index3 = (triplet >> 6) & 0x3F;
const index4 = triplet & 0x3F;
// Add padding based on the original data length
if (i - 3 > str.length) {
result += base64chars[index1] + base64chars[index2] + '==';
} else if (i - 2 > str.length) {
result += base64chars[index1] + base64chars[index2] + base64chars[index3] + '=';
} else {
result += base64chars[index1] + base64chars[index2] + base64chars[index3] + base64chars[index4];
}
}
return result;
}
일반적인 사용 사례:
- 이메일 첨부 파일 인코딩 (MIME 표준)
- URL에서 안전한 데이터 전송 (Base64url 변형 사용, '+'와 '/'가 '-'와 '_'로 대체됨)
- HTML 또는 CSS에 바이너리 이미지 삽입 (data URI 스킴)
- 간단한 데이터를 단일 문자열로 저장 (JWT 토큰 구성 요소 등)
- XML 및 JSON에 바이너리 데이터 포함 (특수 문자 이스케이프 문제 방지)
고급 기능
16진수 형식 지원
우리 도구는 프로그램 코드에서 바이너리 데이터를 다루는 개발자에게 유용한 16진수 형식 입력 및 출력을 지원합니다.
- 입력: 0x11,0x22,0x33 또는 간단히 112233과 같은 hex 형식을 허용합니다
- 출력: 디코딩된 Base64를 코드 삽입을 위해 hex 형식으로 다시 변환합니다
문자셋 지원
다양한 문자셋은 텍스트를 바이트로 다르게 인코딩합니다. 우리 도구는 다양한 텍스트 인코딩을 처리하기 위해 여러 문자셋을 지원합니다:
- UTF-8: 모든 유니코드 문자를 지원하는 범용 인코딩 (기본값)
- ASCII: 기본 영어 문자를 지원하는 7비트 인코딩 (0-127)
- Latin-1 (ISO-8859-1): 서유럽 문자를 지원하는 8비트 인코딩 (ISO-8859-1)
- UTF-16: Windows와 Java에서 일반적으로 사용되는 16비트 인코딩 (Little Endian)
중요 사항:
- Base64로 인코딩된 데이터는 일반적으로 원본 데이터보다 약 33% 더 큽니다 (3바이트가 4문자가 되기 때문)
- Base64는 암호화 알고리즘이 아니라 인코딩 방법일 뿐이며 보안을 제공하지 않습니다
- 큰 파일의 Base64 인코딩은 상당한 메모리와 처리 시간을 소비할 수 있습니다
- URL 안전 Base64 변형은 URL 인코딩 문제를 방지하기 위해 다른 문자 집합을 사용합니다
- 표준 Base64는 줄 길이를 제한하기 위해 줄바꿈을 포함할 수 있으며, 일부 애플리케이션에서는 추가 처리가 필요합니다
Base64와 다른 인코딩 비교:
| 인코딩 유형 | 특성 | 주요 사용처 |
|---|---|---|
| Base64 | 바이너리 데이터를 나타내기 위해 64개의 ASCII 문자 사용 | 이메일 첨부 파일, 텍스트 내 바이너리 데이터 전송 |
| URL 인코딩 | 특수 문자를 %XX 형식으로 변환 | URL 매개변수 전달, 폼 제출 |
| Hex 인코딩 | 각 바이트는 두 개의 16진수 문자로 표현됨 | 해시 값 표현, 바이너리 데이터 시각화 |
Base64에 대한 더 많은 공식 정보는 다음 리소스를 참조하세요: RFC 4648 (Base64 표준) | 위키백과: Base64 | RFC 2045 (MIME 사양)