맨위로가기

베이스64

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

Base64는 바이너리 데이터를 64개의 ASCII 문자를 사용하여 텍스트 형식으로 인코딩하는 방식이다. 1987년 PEM 프로토콜에서 처음 표준화되었으며, MIME 규격에서 널리 사용되면서 다양한 환경에 맞춰 변형되어 사용된다. Base64는 데이터를 6비트씩 분할하여 변환표를 통해 문자로 변환하며, 데이터 크기가 약 33% 증가하는 단점이 있다. 이메일 첨부 파일 전송, XML 파일 내 바이너리 데이터 포함, 데이터 URI 스킴 등 다양한 활용 사례가 있다.

더 읽어볼만한 페이지

  • 유즈넷 - UUCP
    UUCP는 유닉스 시스템 간 파일 복사, 원격 명령 실행, 이메일 및 유즈넷 뉴스 전송을 위한 프로토콜 및 프로그램 모음으로, 초기 인터넷 확장에 중요한 역할을 했으나 TCP/IP 기반 서비스 보편화로 사용이 감소했다.
  • 유즈넷 - RSSSF
    RSSSF는 전 세계 축구 관련 통계 정보를 제공하는 웹사이트이자 프로젝트로, 자원봉사자들의 협력으로 광범위한 데이터를 구축하고 과거에는 '올해의 선수상'을 수여하기도 했다.
  • 데이터 직렬화 포맷 - XML
    XML은 태그 중첩 방식 구문을 사용하는 범용 언어로서, 인터넷을 통한 구조화된 문서 및 데이터 공유를 용이하게 하고, 웰 폼 및 유효 XML 문서 개념을 통해 구문 정확성을 검사하며, 데이터 교환 등 다양한 분야에서 널리 사용된다.
  • 데이터 직렬화 포맷 - S-표현식
    S-표현식은 Lisp 구문에서 소스 코드와 데이터를 표현하는 기본 구조로, 원자와 `(x . y)` 형태의 표현식으로 정의되며, 이진 트리 표현, 다양한 데이터 형식 지원, 그리고 여러 분야에서 활용된다.
  • 전자 우편 - 전자우편
    전자우편은 컴퓨터 네트워크를 이용하여 편지와 메시지를 주고받는 시스템으로, 시분할 메인프레임 통신에서 시작하여 @ 기호 주소 체계 도입 후 아파넷을 통해 대중화되었으며, 다양한 형식의 파일 첨부와 스팸 등의 문제에도 불구하고 널리 사용되는 통신 수단이다.
  • 전자 우편 - 레이 톰린슨
    미국의 프로그래머 레이 톰린슨은 ARPANET에서 이메일 시스템을 개발하고 이메일 주소에 앳(@) 기호를 도입하여 이메일의 아버지로 불린다.
베이스64
기본 정보
유형인코딩 체계
종류8비트 바이너리 데이터를 래핑하는 7비트
사용법MIME
데이터 전송
상세 정보
설명Base64는 2진 데이터를 ASCII 문자열 형식으로 변환하는 인코딩 방식의 총칭이다.
특징8비트 바이너리 데이터를 래핑하는 7비트
바이너리 데이터를 텍스트 형식으로 전송 가능
MIME에서 널리 사용
역사1987년 RFC 986에 처음 등장
RFC 1113에서 PEM에 사용하기 위해 채택
RFC 1421에서 비밀 이메일 전송에 사용하기 위해 다시 채택
현재 RFC 4648에 정의되어 있음
변환 과정바이너리 데이터를 6비트 단위로 나눔
각 6비트를 Base64 인덱스 테이블을 사용하여 ASCII 문자로 변환
필요에 따라 패딩 문자 "="을 추가하여 출력 문자열 길이를 조정
장점바이너리 데이터를 텍스트 기반 시스템에서 안전하게 전송 가능
다양한 프로그래밍 언어 및 환경에서 지원
단점데이터 크기가 약 33% 증가
가독성이 떨어짐
주요 용도이메일 첨부 파일 인코딩
웹 페이지 내 이미지 데이터 포함 (데이터 URI 스킴)
인증 토큰 인코딩
설정 파일 또는 데이터베이스에 바이너리 데이터 저장
관련 RFCRFC 986
RFC 1113
RFC 1421
RFC 2045
RFC 4648

2. 역사

Base64 인코딩은 1987년 RFC 989에서 제안된 개인 정보 보호 강화 전자 메일(PEM) 프로토콜에서 처음 표준화되었다.[8] PEM은 Base64 인코딩을 사용하여 임의의 옥텟 시퀀스를 SMTP와 같은 전송 프로토콜에서 요구하는 6비트 문자의 짧은 줄로 표현할 수 있는 형식으로 변환했다.[8]

PEM의 현재 버전은 대문자와 소문자 로마자(`A`–`Z`, `a`–`z`), 숫자(`0`–`9`), `+` 및 `/` 기호로 구성된 64자 문자 집합을 사용하며, `=` 기호는 패딩 접미사로 사용된다.[4]

이후 MIME(다목적 인터넷 메일 확장)에서 Base64를 두 가지 이진-텍스트 인코딩 방식 중 하나로 채택하면서 널리 사용되기 시작했다.[5] MIME의 Base64 인코딩은 PEM과 동일한 64자 문자 집합 및 인코딩 메커니즘을 사용하며, `=` 기호를 출력 패딩에 사용한다.[5]

3. 작동 원리

베이스64는 MIME에서 정의하며, 임의의 바이트 스트림을 ASCII 문자들로 바꾸는 인코딩 방식이다. 주로 인터넷 전자 메일 전송 시 MIME의 content transfer encoding의 하나로 사용된다.[25]

베이스64는 원본 데이터를 6비트씩 자른 후, 각 6비트 값을 아래 표에 있는 64개의 ASCII 문자로 변환한다.

RFC 4648에 정의된 Base64 문자 집합
인덱스이진수문자rowspan="17"|인덱스이진수문자rowspan="17"|인덱스이진수문자rowspan="17"|인덱스이진수문자
0000000A16010000Q32100000g48110000w
1000001B17010001R33100001h49110001x
2000010C18010010S34100010i50110010y
3000011D19010011T35100011j51110011z
4000100E20010100U36100100k521101000
5000101F21010101V37100101l531101011
6000110G22010110W38100110m541101102
7000111H23010111X39100111n551101113
8001000I24011000Y40101000o561110004
9001001J25011001Z41101001p571110015
10001010K26011010a42101010q581110106
11001011L27011011b43101011r591110117
12001100M28011100c44101100s601111008
13001101N29011101d45101101t611111019
14001110O30011110e46101110u62111110+
15001111P31011111f47101111v63111111/
colspan="12" |패딩=



원본 데이터가 6비트의 배수가 아니라면, 끝에 0을 추가하여 6비트로 만든다. 그리고 결과가 4글자의 배수가 되도록 `=` (패딩) 문자를 추가한다.

Base64 인코딩은 이진 데이터를 ASCII 문자로 인코딩하여, 텍스트만 처리할 수 있는 시스템에서도 데이터를 안정적으로 전송하기 위해 사용된다. 인코딩 결과물은 원본보다 대략 4/3 정도 크기가 늘어나며, 의미 없어 보이는 문자열이 나열된 형태가 된다.

3. 1. 변환 예시

"Man"을 Base64로 인코딩하는 과정은 다음과 같다.

Text contentMan
ASCII7797110
Bit pattern010011010110000101101110
Index1922546
Base64-EncodedTWFu



위 표는 첫 단어인 `Man`을 Base64로 변환하는 과정을 나타낸다.


  • Text content: 원본 문자열 "Man"의 각 문자를 나타낸다.
  • ASCII: 각 문자에 해당하는 ASCII 코드값 (10진수)을 나타낸다.
  • Bit pattern: 각 ASCII 코드값의 8비트 이진수 표현을 나타낸다.
  • Index: 24비트 버퍼에 3바이트(24비트)를 채운 후, 앞에서부터 6비트씩 잘라 얻은 값을 나타낸다.
  • Base64-Encoded: 각 6비트 인덱스에 해당하는 Base64 문자[25]를 나타낸다. Base64는 64개의 문자(`A-Za-z0-9+/`)를 사용한다.


Base64 인코딩은 세 개의 옥텟을 네 개의 인코딩된 문자로 변환한다.

Base64로 소스 문자열 ⟨Man⟩ 인코딩
소스
ASCII 텍스트
문자Man
옥텟77 (0x4d)97 (0x61)110 (0x6e)
비트010011010110000101101110
Base64
인코딩
섹스텟1922546
문자TWFu
옥텟84 (0x54)87 (0x57)70 (0x46)117 (0x75)



`=` 패딩 문자는 마지막 인코딩 블록이 네 개의 Base64 문자를 포함하도록 추가될 수 있다.

유효한 입력 옥텟이 두 개뿐인 경우 (예: 'Ma') 또는 마지막 입력 그룹에 옥텟이 두 개만 포함된 경우, 16비트가 모두 처음 세 개의 Base64 숫자 (18비트)로 캡처된다. 마지막 내용 포함 6비트 블록의 두 개의 최소 유효 비트는 0이 되어 디코딩 시 (후속 `=` 패딩 문자와 함께) 폐기된다.

소스
ASCII 텍스트
문자Macolspan="8" rowspan="2" |
옥텟77 (0x4d)97 (0x61)
비트010011010110000100
Base64
인코딩
섹스텟19224패딩
문자TWE=
옥텟84 (0x54)87 (0x57)69 (0x45)61 (0x3D)



유효한 입력 옥텟이 하나만 있는 경우 (예: 'M') 또는 마지막 입력 그룹에 옥텟이 하나만 포함된 경우, 8비트가 모두 처음 두 개의 Base64 숫자 (12비트)로 캡처된다. 마지막 내용 포함 6비트 블록의 네 개의 최소 유효 비트는 0이 되어 디코딩 시 (후속 두 개의 `=` 패딩 문자와 함께) 폐기된다.

소스
ASCII 텍스트
문자Mcolspan="16" rowspan="2" |
옥텟77 (0x4d)
비트010011010000
Base64
인코딩
섹스텟1916패딩패딩
문자TQ==
옥텟84 (0x54)81 (0x51)61 (0x3D)61 (0x3D)



Base64 변환 절차는 다음과 같다.

단계상태데이터
1원본 데이터`ABCDEFG` (문자열)
26비트씩 분할` {010000, 010100, 001001, 000011, 010001, 000100, 010101, 000110, 010001, 11}` (비트열)
32비트가 남으므로, 4비트 분량의 0을 추가하여 6비트로 한다` {010000, 010100, 001001, 000011, 010001, 000100, 010101, 000110, 010001, 110000}` (비트열)
4변환표에 따라, 4문자씩 변환한다`QUJD, REVG, Rw` (문자열)
5마지막 문자열이 2문자 부족하므로, 2문자 분량의 `=` 기호를 추가하여 4문자로 한다`QUJD, REVG, Rw==` (문자열)
6연결하여 Base64 문자열로 만든다`QUJDREVGRw==` (문자열)


4. RFC 문서

RFC 1421은 현재는 사용되지 않는 PEM 프로토콜에서 Base64 인코딩을 정의했다.[4] 이 RFC에서는 대문자와 소문자 로마자(`A`–`Z`, `a`–`z`), 숫자(`0`–`9`), `+` 및 `/` 기호로 구성된 64자 문자 집합을 사용하며, `=` 기호는 패딩 접미사로 사용된다.

RFC 2045는 MIME에서 Base64 전송 인코딩을 정의한다.[5] MIME의 Base64 인코딩은 RFC 1421 버전의 PEM을 기반으로 하며, 동일한 64자 문자 집합 및 인코딩 메커니즘을 사용하고 `=` 기호를 출력 패딩에 사용한다. MIME은 Base64로 인코딩된 줄의 최대 길이를 76자로 지정하며, 표준 64개 인코딩 문자 집합 외부의 문자는 무시해야 하지만, 대부분의 구현에서는 CR/LF 줄 바꿈 쌍을 사용하여 인코딩된 줄을 구분한다.

RFC 3548은 Base16, Base32, Base64 인코딩에 대한 RFC 1421과 RFC 2045의 내용을 통합한 정보 제공 목적의 문서이다.[6] 이 RFC는 인코딩 알파벳 이외의 문자를 사용한 메시지 생성을 허용하지 않으며, 디코더는 인코딩 알파벳 이외의 문자가 포함된 데이터를 거부해야 한다.

RFC 4648은 RFC 3548을 대체하며, Base64, Base32, Base16 인코딩에 대해 설명한다.

RFC 4880은 OpenPGP에서 Radix-64 인코딩을 정의한다. Radix-64는 MIME에서 정의하는 Base64 인코딩과 동일하며, 추가적으로 24비트 CRC 체크섬을 포함한다.

5. 변형

Base64는 다양한 환경에 맞게 변형되어 사용된다.


  • URL-safe Base64: URL에서 문제가 될 수 있는 '+'와 '/' 문자를 각각 '-', '_' 문자로 대체한다. (RFC 4648 §5) 유튜브와 같은 사이트에서 이 방식을 사용한다.[12]
  • 파일 이름-safe Base64: 파일 이름에서 문제가 될 수 있는 문자를 대체한다.
  • UTF-7: Modified BASE64를 사용하여 UTF-16을 7비트 ASCII 문자로 변환한다. (RFC 2152) '=' 패딩 기호는 사용하지 않는다.
  • OpenPGP: Radix-64 인코딩은 Base64와 동일하며, 추가적으로 24비트 CRC 체크섬을 포함한다. (RFC 4880)
  • 기타: 정규 표현식, XML 등 특정 환경에서 사용되는 변형들이 있다.


변형62번째 문자63번째 문자패딩1행 고정 길이 여부행 최대 길이줄 바꿈 문자지정 문자 외 사용 가능 여부행 체크섬
개인 정보 보호 강화 메일(PEM) Base64
(RFC 1421, 폐기)
+/=
(필수)

(최종 행 제외)
64CR+LF금지(없음)
MIME Base64 전송 인코딩
(RFC 2045)
+/=
(필수)
아니요
(가변)
76CR+LF허용
(파기됨)
(없음)
표준 Base64 인코딩
(RFC 4648 §4)
+/=
(필수)

(최종 행 제외)
64 또는 76
(줄 바꿈이 필요한 경우)
CR+LF
(줄 바꿈이 필요한 경우)
금지(없음)
OpenPGP용 Radix-64
(RFC 4880)
+/=
(필수)
아니요
(가변)
76CR+LF금지24비트 CRC
(Radix-64 인코딩, pad 문자 포함)
UTF-7 변형 Base64
(RFC 1642, 폐기)
+/(없음)아니요
(가변)
(없음)(없음)금지(없음)
파일명 변형 Base64
(비표준)
+-(없음)아니요
(가변)
(파일 시스템 한계, 보통 255)(없음)금지(없음)
URL 애플리케이션 변형 Base64
(base64url 인코딩)
-_(없음)아니요
(가변)
애플리케이션 의존적(없음)금지(없음)
XML 이름 토큰용 수정 Base64
(Nmtoken)
.-(없음)아니요
(가변)
XML 파서 의존적(없음)금지(없음)
XML 식별자용 수정 Base64
(Name)
_:(없음)아니요
(가변)
XML 파서 의존적(없음)금지(없음)
프로그램 식별자용 수정 Base64
(변종 1, 비표준)
_-(없음)아니요
(가변)
언어·시스템 의존적(없음)금지(없음)
프로그램 식별자용 수정 Base64
(변종 2, 비표준)
._(없음)아니요
(가변)
언어·시스템 의존적(없음)금지(없음)
정규 표현식 변형 Base64
(비표준)
!-(없음)아니요
(가변)
애플리케이션 의존적(없음)금지(없음)


6. 활용 사례

베이스64는 다양한 상황에서 활용될 수 있다.


  • 전자 메일: SMTP 등 7비트 문자열만 주고받을 수 있는 환경에서 첨부 파일 등 바이너리 형식의 데이터를 전송할 때 표준적으로 이용된다.[25]
  • HTTP Basic 인증: 사용자 이름과 비밀번호를 콜론(`:`)으로 구분하여 Base64로 인코딩한 문자열이 사용된다.
  • 전자 게시판: 이미지나 텍스트 문서를 압축한 파일 등 바이너리 데이터를 주고받기 위해 사용된다.
  • 데이터 URI 스킴: 파일 내용을 Base64로 인코딩하여 표현할 수 있다. 예를 들어, 배경 이미지 및 글꼴은 별도의 파일로 제공되는 대신 `data:` URI로 CSS 스타일시트 파일에 지정할 수 있다.
  • XML, HTML: 바이너리 데이터를 포함시키기 위해 사용된다. 예를 들어, Firefox의 내보낸 `bookmarks.html` 파일의 favicons.
  • 자바스크립트: `atob()`, `btoa()` 메서드를 사용하여 Base64 인코딩 및 디코딩 기능을 제공한다. (HTML5)[12]
  • 암호화폐: 공개 키를 Base64로 인코딩된 텍스트 문자열로 표현하여 사용자의 지갑 소프트웨어에 쉽게 복사하여 붙여넣을 수 있다.
  • 체크섬 또는 공개 키 지문: 사람이 신속하게 확인해야 하는 바이너리 데이터는 종종 쉽게 확인할 수 있도록 Base64로 표현된다.
  • QR 코드: 바이너리 데이터를 포함하는 QR 코드는 때때로 원시 바이너리 데이터를 단순히 저장하는 대신 Base64로 인코딩하여 저장한다.

7. 문제점

베이스64 인코딩을 수행하면 데이터량이 크게 증가한다.[25] 원본 데이터보다 대략 4/3 정도 크기가 늘어난다. 특히 큰 파일을 송수신할 때는 전자 메일 외의 다른 수단을 이용하는 것이 더 빠를 수 있다. 또한, 영문 텍스트에 특수 문자가 섞여 있는 경우에는 특수 문자만 인코딩하는 것이 데이터 효율이 더 좋고, 디코딩을 하지 않아도 대략적인 내용을 파악할 수 있다는 장점이 있다. (Quoted-printable 참조)

참조

[1] 웹사이트 Base64 encoding and decoding – Web APIs https://developer.mo[...] MDN Web Docs
[2] 웹사이트 When to base64 encode images (and when not to) https://www.davidbca[...] 2011-08-28
[3] IETF The Base16, Base32, and Base64 Data Encodings Internet Engineering Task Force 2010-03-18
[4] IETF Privacy Enhancement for InternetElectronic Mail: Part I: Message Encryption and Authentication Procedures Internet Engineering Task Force 2010-03-18
[5] IETF Multipurpose Internet Mail Extensions: (MIME) Part One: Format of Internet Message Bodies Internet Engineering Task Force 2010-03-18
[6] IETF The Base16, Base32, and Base64 Data Encodings Internet Engineering Task Force 2010-03-18
[7] conference Base64 Malleability in Practice https://eprint.iacr.[...] 2022-05-30
[8] IETF Privacy Enhancement for Internet Electronic Mail Internet Engineering Task Force 2010-03-18
[9] IETF UTF-7 A Mail-Safe Transformation Format of Unicode Internet Engineering Task Force 2010-03-18
[10] IETF UTF-7 A Mail-Safe Transformation Format of Unicode Internet Engineering Task Force 2010-03-18
[11] IETF OpenPGP Message Format Internet Engineering Task Force 2010-03-18
[12] 웹사이트 Here's Why YouTube Will Practically Never Run Out of Unique Video IDs https://www.mentalfl[...] 2016-03-23
[13] 웹사이트 7.3. Base64 utility methods https://w3c.github.i[...] World Wide Web Consortium 2018-01-02
[14] 문서
[15] 웹사이트 Encode PDF (Portable Document Format) File (.pdf) to Base64 Data https://base64.onlin[...] 2024-03-21
[16] 웹사이트 Edit fiddle http://jsfiddle.net/[...]
[17] 웹사이트 The GEDCOM Standard Release 5.5 http://homepages.roo[...] Homepages.rootsweb.ancestry.com 2012-06-21
[18] 웹사이트 src/lib/libc/crypt/bcrypt.c r1.1 https://cvsweb.openb[...] 1997-02-13
[19] 웹사이트 6PACK a "real time" PC to TNC protocol https://web.archive.[...] 2013-05-19
[20] 웹사이트 Shell Arithmetic https://www.gnu.org/[...] 2020-04-08
[21] 문서
[22] 문서
[23] 문서
[24] 문서
[25] 문서
[26] 문서
[27] 문서



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com