base64 — Base16, Base32, Base64, Base85 데이터 인코딩¶
소스 코드: Lib/base64.py
이 모듈은 바이너리 데이터를 인쇄 가능한 ASCII 문자로 인코딩하고, 그러한 인코딩을 다시 바이너리 데이터로 디코딩하는 함수를 제공합니다. 여기에는 encodings specified in 에 명시된 RFC 4648 (Base64, Base32 및 Base16), PDF 2.0 에 정의된 Base85 encoding, 그리고 다른 곳에서 사용되는 비표준 변종의 Base85가 포함됩니다.
이 모듈은 두 개의 인터페이스를 제공합니다. 최신 인터페이스는 바이트열류 객체를 ASCII bytes로 인코딩하고, 바이트열류 객체나 ASCII를 포함하는 문자열을 bytes로 디코딩하는 것을 지원합니다. RFC 4648에 정의된 두 가지(일반, 그리고 URL과 파일 시스템에서 안전한) base-64 알파벳이 모두 지원됩니다.
legacy interface 는 문자열로부터의 디코딩을 지원하지 않지만, file objects 로의 인코딩 및 디코딩 기능은 제공합니다. 이 인터페이스는 Base64 표준 알파벳만 지원하며, RFC 2045 에 따라 76자마다 줄 바꿈을 추가합니다. 만약 RFC 2045 지원을 찾고 있다면 대신 email 패키지를 확인하는 것이 좋습니다.
버전 3.3에서 변경: ASCII 전용 유니코드 문자열은 이제 최신 인터페이스의 디코딩 함수가 받아들입니다.
버전 3.4에서 변경: 모든 바이트열류 객체는 이제 이 모듈의 모든 인코딩과 디코딩 함수가 받아들입니다. Ascii85/Base85 지원이 추가되었습니다.
RFC 4648 인코딩¶
RFC 4648 인코딩은 바이너리 데이터를 이메일로 안전하게 전송하거나, URL의 일부로 사용하거나, HTTP POST 요청에 포함하기에 적합합니다.
- base64.b64encode(s, altchars=None, *, padded=True, wrapcol=0)¶
Base64를 사용하여 바이트열류 객체 s를 인코딩하고 인코딩된
bytes를 반환합니다.선택적 altchars는
+와/문자의 대체 알파벳을 지정하는 길이 2의 바이트열류 객체여야 합니다. 이를 통해 응용 프로그램은 URL이나 파일 시스템에서 안전한 Base64 문자열을 생성할 수 있습니다. 기본값은None이며, 표준 Base64 알파벳이 사용됩니다.padded 이 참인 경우(기본값), 인코딩된 데이터를 ‘=’ 문자로 채워 크기를 4의 배수로 맞춥니다. padded 가 거짓이면 패딩 문자를 추가하지 않습니다.
wrapcol 이 0이 아닌 경우, 최대 wrapcol 문자마다 줄 바꿈(
b'\n') 문자를 삽입합니다. wrapcol 이 0인 경우(기본값)는 줄 바꿈을 삽입하지 않습니다.버전 3.15에서 변경: padded*와 *wrapcol 매개변수가 추가되었습니다.
- base64.b64decode(s, altchars=None, validate=False, *, padded=True, canonical=False)¶
- base64.b64decode(s, altchars=None, validate=True, *, ignorechars, padded=True, canonical=False)
Base64로 인코딩된 바이트열류 객체나 ASCII 문자열 s를 디코딩하고 디코딩된
bytes를 반환합니다.선택적 altchars는
+와/문자 대신에 사용되는 대체 알파벳을 지정하는 길이 2의 바이트열류 객체나 ASCII 문자열이어야 합니다.padded 이 참(true)인 경우, 마지막 4개의 base64 알파벳 그룹은 ‘=’ 문자로 채워져야 합니다. padded 가 거짓(false)인 경우, 패딩은 필요하지 않으며 인식되지도 않습니다. 즉, ‘=’ 문자는 패딩으로 취급되지 않고 비알파벳 문자로 처리됩니다. 이는 validate 가 거짓일 때 무시되며, validate 가 참이고 ignorechars 에 b’=’이 포함되어 있지 않은 경우
Error를 발생시킵니다.s가 잘못 채워지면(padded)
binascii.Error예외가 발생합니다.ignorechars 가 지정된 경우, validate 가 참일 때 입력에서 무시할 문자를 포함하는 bytes-like object 여야 합니다. ignorechars 에 패딩 문자인
'='이 포함되어 있으면 인코딩된 데이터 끝부분 앞에 나오는 패딩 문자들과 초과된 패딩 문자가 무시됩니다. validate 의 기본값은 ignorechars 가 지정되면True, 그렇지 않으면False입니다.validate 가 거짓인 경우, 일반 base-64 알파벳도 아니고 (만약 ignorechars 가 지정되지 않은 경우) 대체 알파벳도 아닌 문자는 패딩 검사 전에 버려집니다. 단,
+와/문자는 altchars 에 포함되지 않는 한 원래의 의미를 유지합니다(향후 파이썬 버전에서는 이들 또한 버려질 예정입니다).validate 가 참인 경우, 입력에 포함된 이러한 비알파벳 문자들은
binascii.Error를 발생시킵니다.canonical 이 참인 경우, 0이 아닌 패딩 비트가 포함된 경우 거부됩니다. 자세한 내용은
binascii.a2b_base64()를 참조하십시오.엄격한 base64 검사에 대한 자세한 정보는
binascii.a2b_base64()를 참조하십시오.버전 3.15에서 변경: canonical, ignorechars, padded 매개변수가 추가되었습니다.
버전 3.15부터 폐지됨: 대체 알파벳과 함께
+및/문자를 허용하는 기능이 이제 폐지(deprecated)되었습니다.
- base64.urlsafe_b64encode(s, *, padded=True)¶
표준 Base64 알파벳에서
+를-로,/를_로 대체한 URL 및 파일 시스템 안전 알파벳을 사용하여 bytes-like object s 를 인코딩하고 인코딩된bytes를 반환합니다. padded 가 참(기본값)인 경우 결과에 여전히=이 포함될 수 있습니다.버전 3.15에서 변경: padded 매개변수가 추가되었습니다.
- base64.urlsafe_b64decode(s, *, padded=False)¶
표준 Base64 알파벳에서
+대신-를,/대신_를 사용하도록 대체한 URL과 파일 시스템에서 안전한 알파벳을 사용하여 바이트열류 객체나 ASCII 문자열 s를 디코딩하고, 디코딩된bytes를 반환합니다.버전 3.15에서 변경: padded 매개변수가 추가되었습니다. 이제 기본값으로 입력의 패딩이 요구되지 않습니다.
버전 3.15부터 폐지됨:
+및/문자를 허용하는 기능이 이제 폐지(deprecated)되었습니다.
- base64.b32encode(s, *, padded=True, wrapcol=0)¶
Base32를 사용하여 바이트열류 객체 s를 인코딩하고 인코딩된
bytes를 반환합니다.padded 이 true(기본값)이면 인코딩된 데이터를 ‘=’ 문자로 채워 크기를 8의 배수로 맞춥니다. padded 가 false이면 패딩 문자를 추가하지 않습니다.
wrapcol 이 0이 아니면 최대 wrapcol 문자마다 줄 바꿈(
b'\n') 문자를 삽입합니다. wrapcol 이 0(기본값)인 경우 줄 바꿈을 추가하지 않습니다.버전 3.15에서 변경: padded*와 *wrapcol 매개변수가 추가되었습니다.
- base64.b32decode(s, casefold=False, map01=None, *, padded=True, ignorechars=b'', canonical=False)¶
Base32로 인코딩된 바이트열류 객체나 ASCII 문자열 s를 디코딩하고 디코딩된
bytes를 반환합니다.선택적 casefold는 소문자 알파벳을 입력으로 사용할 수 있는지를 지정하는 플래그입니다. 보안을 위해, 기본값은
False입니다.RFC 4648은 숫자 0(영)을 글자 O(오)로 선택적으로 매핑하고, 숫자 1(일)을 글자 I(아이)나 글자 L(엘)로 선택적으로 매핑할 수 있게 합니다. 선택적 인자 map01이
None이 아니면, 숫자 1이 매핑되어야 하는 글자를 지정합니다 (map01이None이 아닐 때, 숫자 0은 항상 글자 O로 매핑됩니다). 보안상의 이유로 기본값은None이고, 0과 1은 입력에 허용되지 않습니다.padded 이 참인 경우, 마지막 8개의 base 32 알파벳 그룹은 ‘=’ 문자로 채워져야 합니다. padded 가 거짓인 경우 패딩은 필요하지도 않고 인식되지도 않습니다. 즉, ‘=’ 문자는 패딩으로 취급되지 않고 비알파벳 문자로 처리되므로, ignorechars 에 b’=’이 포함되어 있지 않은 경우
binascii.Error를 발생시킵니다.ignorechars 는 입력에서 무시할 문자를 포함하는 bytes-like object 여야 합니다.
canonical 이 참인 경우, 0이 아닌 패딩 비트가 포함된 경우 거부됩니다. 자세한 내용은
binascii.a2b_base32()를 참조하십시오.s가 잘못 채워졌거나(padded) 입력에 알파벳이 아닌 문자가 있으면
binascii.Error가 발생합니다.버전 3.15에서 변경: canonical, ignorechars, padded 매개변수가 추가되었습니다.
- base64.b32hexencode(s, *, padded=True, wrapcol=0)¶
b32encode()와 유사하지만 RFC 4648 에 정의된 확장 16진수 알파벳(Extended Hex Alphabet)을 사용합니다.Added in version 3.10.
버전 3.15에서 변경: padded*와 *wrapcol 매개변수가 추가되었습니다.
- base64.b32hexdecode(s, casefold=False, *, padded=True, ignorechars=b'', canonical=False)¶
b32decode()와 유사하지만 RFC 4648 에 정의된 확장 16진수 알파벳(Extended Hex Alphabet)을 사용합니다.이 버전에서는 숫자 0(zero)을 문자 O(oh)로 매핑하거나, 숫자 1(one)을 문자 I(eye) 또는 L(el)로 매핑하는 것을 허용하지 않습니다. 이 모든 문자는 확장 헥사 알파벳(Extended Hex Alphabet)에 포함되어 있으며 서로 교체 가능하지 않습니다.
Added in version 3.10.
버전 3.15에서 변경: canonical, ignorechars, padded 매개변수가 추가되었습니다.
- base64.b16encode(s, *, wrapcol=0)¶
Base16을 사용하여 바이트열류 객체 s를 인코딩하고 인코딩된
bytes를 반환합니다.wrapcol 이 0이 아니면 최대 wrapcol 문자마다 줄 바꿈(
b'\n') 문자를 삽입합니다. wrapcol 이 0(기본값)인 경우 줄 바꿈을 추가하지 않습니다.버전 3.15에서 변경: wrapcol 매개 변수가 추가되었습니다.
- base64.b16decode(s, casefold=False, *, ignorechars=b'')¶
Base16으로 인코딩된 바이트열류 객체나 ASCII 문자열 s를 디코딩하고 디코딩된
bytes를 반환합니다.선택적 casefold는 소문자 알파벳을 입력으로 사용할 수 있는지를 지정하는 플래그입니다. 보안을 위해, 기본값은
False입니다.ignorechars 는 입력에서 무시할 문자를 포함하는 bytes-like object 여야 합니다.
s가 잘못 채워졌거나(padded) 입력에 알파벳이 아닌 문자가 있으면
binascii.Error가 발생합니다.버전 3.15에서 변경: ignorechars 매개변수가 추가되었습니다.
Base85 인코딩¶
Base85 인코딩은 5개의 ASCII 문자를 사용하여 4바이트를 표현하는 알고리즘군입니다. 원래 Unix의 btoa(1) 유틸리티에 구현되었으며, 이후 Adobe가 PostScript 언어에서 채택한 버전이 PDF 2.0(ISO 32000-2)으로 표준화되었습니다. btoa 및 PDF 변형 모두 이 버전은 a85encode() 로 구현됩니다.
다른 출력 문자 집합을 사용하는 별도의 버전이 RFC 1924 에서 만우절 농담으로 정의되었으나, 현재는 Git 및 기타 소프트웨어에서 사용되고 있습니다. 이 버전은 b85encode() 로 구현됩니다.
마지막으로, 프로그래밍 언어 문자열에 안전하게 포함되도록 설계된 또 다른 출력 문자 집합을 사용하는 세 번째 버전이 ZeroMQ에 의해 정의되었으며, 여기서는 z85encode() 로 구현됩니다.
이 모듈에 포함된 함수들은 다음 사항들을 처리하는 방식에서 차이가 있습니다:
닫는 표시인
<~및~>마커를 포함하고 기대하는지 여부.입력을 여러 줄로 폴딩할지 여부.
인코딩에 사용되는 ASCII 문자 집합.
공백 및 널 바이트 시퀀스의 압축된 인코딩.
입력에 적용된 제로 패딩(zero-padding) 바이트의 인코딩.
자세한 내용은 개별 함수의 문서를 참조하십시오.
- base64.a85encode(b, *, foldspaces=False, wrapcol=0, pad=False, adobe=False)¶
Ascii85를 사용하여 바이트열류 객체 b를 인코딩하고 인코딩된
bytes를 반환합니다.foldspaces 는 ‘btoa’가 지원하는 것과 같이, 4개의 연속된 공백(ASCII 0x20) 대신 특수한 짧은 시퀀스 ‘y’를 사용하는 선택적 플래그입니다. 이 기능은 PDF에서 사용되는 표준 인코딩에서는 지원되지 않습니다.
wrapcol 이 0이 아닌 경우, 최대 wrapcol 문자마다 줄 바꿈(
b'\n') 문자를 삽입합니다. wrapcol 이 0인 경우(기본값)는 줄 바꿈을 삽입하지 않습니다.pad 는
btoa와 같이 입력 끝에 적용된 제로 패딩이 출력 인코딩에서 완전히 유지되어 결과가 정확히 5바이트의 배수가 되도록 할지 여부를 제어합니다. 이는 데이터의 길이를 보존하지 않으므로 PDF에서 사용되는 표준 인코딩의 일부가 아닙니다.adobe 는 인코딩된 바이트 시퀀스가 PostScript base-85 문자열 리터럴과 같이
<~및~>로 프레임화되는지 여부를 제어합니다. PDF 문서의 ASCII85Decode 스트림은 반드시~>로 끝나야 하지만, 앞부분에<~를 사용해서는 안 된다는 점에 유의하십시오.Added in version 3.4.
- base64.a85decode(b, *, foldspaces=False, adobe=False, ignorechars=b' \t\n\r\x0b', canonical=False)¶
Ascii85로 인코딩된 바이트열류 객체나 ASCII 문자열 b를 디코딩하고 디코딩된
bytes를 반환합니다.foldspaces 는 짧은 시퀀스 ‘y’를 4개의 연속된 공백(ASCII 0x20)의 축약형으로 허용할지 여부를 지정하는 플래그입니다. 이 기능은 PDF 및 PostScript에서 사용되는 표준 Ascii85 인코딩에서는 지원되지 않습니다.
adobe 는
<~및~>마커가 존재하는지 여부를 제어합니다. 앞부분의<~는 필수 사항이 아니지만, 입력은 반드시~>로 끝나야 하며 그렇지 않으면ValueError가 발생합니다.ignorechars should be a bytes-like object containing characters to ignore from the input. This should only contain whitespace characters, and by default contains all whitespace characters in ASCII.
canonical 이 참이면 비정형(non-canonical) 인코딩은 거부됩니다. 자세한 내용은
binascii.a2b_ascii85()를 참조하십시오.Added in version 3.4.
버전 3.15에서 변경: canonical 매개 변수가 추가되었습니다. 단일 문자로 구성된 마지막 그룹은 이제 항상 인코딩 위반으로 거부됩니다.
- base64.b85encode(b, pad=False, *, wrapcol=0)¶
base85를 사용하여 바이트열류 객체 b를 인코딩하고 (예를 들어 git 스타일 바이너리 diff에서 사용되는 것처럼), 인코딩된
bytes를 반환합니다.입력은
b'\0'으로 채워져 인코딩 전에 길이가 4바이트의 배수가 됩니다. pad 가 참이면 결과로 생성된 모든 문자가 출력에 유지되며, 이는 항상 5바이트의 배수가 되므로 디코딩 시 데이터의 길이가 유지되지 않을 수 있습니다.wrapcol 이 0이 아니면 최대 wrapcol 문자마다 줄 바꿈(
b'\n') 문자를 삽입합니다. wrapcol 이 0(기본값)인 경우 줄 바꿈을 추가하지 않습니다.Added in version 3.4.
버전 3.15에서 변경: wrapcol 매개 변수가 추가되었습니다.
- base64.b85decode(b, *, ignorechars=b'', canonical=False)¶
바이트열류 객체\나 ASCII 문자열 b\를 base85로 인코딩된 내용을 디코딩하고 디코딩된
bytes\를 반환합니다.ignorechars 는 입력에서 무시할 문자를 포함하는 bytes-like object 여야 합니다.
canonical 이 참이면 비정형(non-canonical) 인코딩은 거부됩니다. 자세한 내용은
binascii.a2b_base85()를 참조하십시오.Added in version 3.4.
버전 3.15에서 변경: canonical 및 ignorechars 매개 변수가 추가되었습니다. 단일 문자로 구성된 마지막 그룹은 이제 항상 인코딩 위반으로 거부됩니다.
- base64.z85encode(s, pad=False, *, wrapcol=0)¶
바이트열류 객체 s\를 Z85 (ZeroMQ 에서 사용됨)를 사용하여 인코딩하고, 인코딩된
bytes\를 반환합니다. 더 자세한 내용은 Z85 명세\를 참조하십시오.입력은
b'\0'으로 채워져 인코딩 전 길이가 4바이트의 배수가 됩니다. pad 가 참이면 모든 결과 문자가 출력에 유지되며, 이는 ZeroMQ 표준에 따라 항상 5바이트의 배수가 됩니다.wrapcol 이 0이 아니면 최대 wrapcol 문자마다 줄 바꿈(
b'\n') 문자를 삽입합니다. wrapcol 이 0(기본값)인 경우 줄 바꿈을 추가하지 않습니다.Added in version 3.13.
버전 3.15에서 변경: pad 매개 변수가 추가되었습니다.
버전 3.15에서 변경: wrapcol 매개 변수가 추가되었습니다.
- base64.z85decode(s, *, ignorechars=b'', canonical=False)¶
Z85로 인코딩된 바이트열류 객체\나 ASCII 문자열 s\를 디코딩하고 디코딩된
bytes\를 반환합니다. 더 자세한 내용은 Z85 명세\를 참조하십시오.ignorechars 는 입력에서 무시할 문자를 포함하는 bytes-like object 여야 합니다.
canonical 이 참이면 비정형(non-canonical) 인코딩은 거부됩니다. 자세한 내용은
binascii.a2b_base85()를 참조하십시오.Added in version 3.13.
버전 3.15에서 변경: canonical 및 ignorechars 매개 변수가 추가되었습니다. 단일 문자로 구성된 마지막 그룹은 이제 항상 인코딩 위반으로 거부됩니다.
레거시 인터페이스¶
- base64.decode(input, output)¶
바이너리 input 파일의 내용을 디코딩하고 결과 바이너리 데이터를 output 파일에 씁니다. input과 output은 파일 객체여야 합니다. input은
input.readline()이 빈 바이트열 객체를 반환할 때까지 읽힙니다.
- base64.decodebytes(s)¶
하나 이상의 base64 인코딩된 데이터 줄을 포함해야 하는 바이트열류 객체 s를 디코딩하고 디코딩된
bytes를 반환합니다.Added in version 3.1.
- base64.encode(input, output)¶
바이너리 input 파일의 내용을 인코딩하고 base64로 인코딩된 결과 데이터를 output 파일에 씁니다. input과 output은 파일 객체여야 합니다. input은
input.read()이 빈 바이트열 객체를 반환할 때까지 읽힙니다.encode()는 RFC 2045(MIME)에 따라 출력의 76바이트마다 개행 문자(b'\n')를 삽입할 뿐만 아니라, 항상 출력이 개행 문자로 끝나도록 합니다.
- base64.encodebytes(s)¶
임의의 바이너리 데이터를 포함할 수 있는 바이트열류 객체 s를 인코딩하고, RFC 2045 (MIME)에 따라 76바이트의 출력마다 개행(
b'\n')이 삽입되고, 후행 개행이 붙은 base64 인코딩된 데이터를 포함하는bytes를 반환합니다.Added in version 3.1.
모듈 사용 예:
>>> import base64
>>> encoded = base64.b64encode(b'data to be encoded')
>>> encoded
b'ZGF0YSB0byBiZSBlbmNvZGVk'
>>> data = base64.b64decode(encoded)
>>> data
b'data to be encoded'
보안 고려 사항¶
RFC 4648 에 새로운 보안 고려 사항 섹션(섹션 12)이 추가되었습니다. 운영 환경에 배포되는 모든 코드에 대해 보안 섹션을 검토할 것을 권장합니다.
더 보기
- 모듈
binascii ASCII에서 바이너리로, 바이너리에서 ASCII로의 변환이 포함된 지원 모듈.
- RFC 1521 - MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies
5.2 절, “Base64 Content-Transfer-Encoding” 은 base64 인코딩의 정의를 제공합니다.
- ISO 32000-2 Portable document format - Part 2: PDF 2.0
섹션 7.4.3, “ASCII85Decode Filter”는 출력 문자 집합과 제로 패딩 및 부분 출력 그룹을 사용한 데이터 길이 보존에 대한 세부 정보를 포함하여 PDF 및 PostScript에서 사용되는 Ascii85 인코딩의 정의를 제공합니다.
- ZeroMQ RFC 32/Z85
“Formal Specification” 섹션은 Z85에서 사용되는 문자 집합을 제공합니다.