Python

base64 — Base16, Base32, Base64, Base85 데이터 인코딩

소스 코드: Lib/base64.py


이 모듈은 이진 데이터를 인쇄 가능한 ASCII 문자로 인코딩하고, 이러한 인코딩을 다시 이진 데이터로 디코딩하는 함수를 제공합니다. 여기에는 <base64-rfc-4648>\에서 지정된 인코딩 선언\ (Base64, Base32 및 Base16), PDF 2.0 <https://pdfa.org/resource/iso-32000-2/>\에 지정된 Base85 인코딩\, 그리고 다른 곳에서 사용된 비표준 Base85 변형이 포함됩니다.

이 모듈은 두 개의 인터페이스를 제공합니다. 최신 인터페이스는 바이트열류 객체를 ASCII bytes로 인코딩하고, 바이트열류 객체나 ASCII를 포함하는 문자열을 bytes로 디코딩하는 것을 지원합니다. RFC 4648에 정의된 두 가지(일반, 그리고 URL과 파일 시스템에서 안전한) base-64 알파벳이 모두 지원됩니다.

레거시 인터페이스 <base64-legacy>`는 문자열로부터 디코딩을 지원하지 않지만, :term:`파일 객체 <file object>`의 인코딩 및 디코딩을 위한 함수를 제공합니다. 이 모듈은 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 가 True인 경우 (기본값), 인코딩된 데이터의 크기를 4의 배수로 만들기 위해 ‘=’ 문자로 패딩합니다. padded 가 False인 경우, 패딩 문자를 추가하지 않습니다.

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개 기본 64 알파벳 문자 그룹은 ‘=’ 문자로 패딩해야 합니다. padded 가 False인 경우, 패딩은 필요하지도, 인식되지도 않습니다. ‘=’ 문자는 패딩으로 처리되지 않고 비알파벳 문자로 처리되므로, validate 가 False일 때는 조용히 무시되거나, ignorechars 에 b’=’이 포함되지 않은 한 validate 가 True일 때는 Error 를 발생시킵니다.

s가 잘못 채워지면(padded) binascii.Error 예외가 발생합니다.

ignorechars 를 지정한 경우, validate 가 True일 때 입력으로부터 무시할 문자가 포함된 바이트열류 객체 이 되어야 합니다. ignorechars 에 패딩 문자 '=' 가 포함되는 경우, 인코딩된 데이터 끝 전에 나타나는 패딩 문자들과 과도한 패딩 문자들은 무시됩니다. ignorechars 가 지정된 경우 validate 의 기본값은 True 이고, 아니면 False 입니다.

validate 가 False인 경우, 일반 base-64 알파벳도 그리고 ( ignorechars 가 지정되지 않은 경우) 대체 알파벳에도 포함되지 않은 문자는 패딩 검사 전에 폐기됩니다. 하지만 +/ 문자는 altchars 에 포함되지 않더라도 원래 의미를 유지합니다 (향후 파이썬 버전에서는 폐기될 것입니다).

validate 가 True인 경우, 입력에 이 알파벳이 아닌 문자가 있으면 binascii.Error 가 발생합니다.

canonical 이 True인 경우, 0이 아닌 패딩 비트를 거부합니다. 자세한 내용은 binascii.a2b_base64() 를 참조하십시오.

엄격한 base64 검사에 대한 더 자세한 내용은 :func:`binascii.a2b_base64`를 참조하십시오.

버전 3.15에서 변경: canonical, ignorechars, padded 매개 변수를 추가했습니다.

버전 3.15부터 폐지됨: 대체 알파벳과 함께 +/ 문자를 허용하는 것은 이제 사용이 중단됩니다.

base64.standard_b64encode(s)

표준 Base64 알파벳을 사용하여 바이트열류 객체 s를 인코딩하고 인코딩된 bytes를 반환합니다.

base64.standard_b64decode(s)

표준 Base64 알파벳을 사용하여 바이트열류 객체나 ASCII 문자열 s를 디코딩하고 디코딩된 bytes를 반환합니다.

base64.urlsafe_b64encode(s, *, padded=True)

표준 Base64 알파벳에서 + 대신 - \를, / 대신 _ \를 사용하도록 대체한 URL과 파일 시스템에서 안전한 알파벳을 사용하여 바이트열류 객체 s \를 인코딩하고, 인코딩된 bytes \를 반환합니다. padded 가 True인 경우 (기본값) 결과에는 여전히 = \가 포함될 수 있습니다.

버전 3.15에서 변경: padded 매개 변수를 추가했습니다.

base64.urlsafe_b64decode(s, *, padded=False)

표준 Base64 알파벳에서 + 대신 -를, / 대신 _를 사용하도록 대체한 URL과 파일 시스템에서 안전한 알파벳을 사용하여 바이트열류 객체나 ASCII 문자열 s를 디코딩하고, 디코딩된 bytes를 반환합니다.

버전 3.15에서 변경: padded 매개 변수를 추가했습니다. 기본적으로 입력 패딩이 더 이상 요구되지 않습니다.

버전 3.15부터 폐지됨: +``와 ``/ 문자를 허용하는 것은 이제 사용이 중단됩니다.

base64.b32encode(s, *, padded=True, wrapcol=0)

Base32를 사용하여 바이트열류 객체 s를 인코딩하고 인코딩된 bytes를 반환합니다.

padded 가 True인 경우 (기본값), 인코딩된 데이터의 크기를 8의 배수로 만들기 위해 ‘=’ 문자로 패딩합니다. padded 가 False인 경우, 패딩 문자를 추가하지 않습니다.

wrapcol\은 출력에 줄 바꿈 (b'\\n') 문자가 최대 wrapcol\ 문자마다 추가되어야 하는지를 제어합니다. 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(엘)로 선택적으로 매핑할 수 있게 합니다. 선택적 인자 map01None이 아니면, 숫자 1이 매핑되어야 하는 글자를 지정합니다 (map01None이 아닐 때, 숫자 0은 항상 글자 O로 매핑됩니다). 보안상의 이유로 기본값은 None이고, 0과 1은 입력에 허용되지 않습니다.

If padded is true, the last group of 8 base 32 alphabet characters must be padded with the ‘=’ character. If padded is false, padding is neither required nor recognized: the ‘=’ character is not treated as padding but as a non-alphabet character, which means it raises an Error unless b’=’ is included in ignorechars.

ignorechars\는 입력에서 무시할 문자가 포함된 :term:`바이트열류 객체 <bytes-like object>`입니다.

canonical\가 True\라면, 0이 아닌 패딩 비트는 거부됩니다. 자세한 내용은 binascii.a2b_base32()\를 참조하십시오.

s가 잘못 채워졌거나(padded) 입력에 알파벳이 아닌 문자가 있으면 binascii.Error가 발생합니다.

버전 3.15에서 변경: canonical, ignorechars, padded 매개 변수를 추가했습니다.

base64.b32hexencode(s, *, padded=True, wrapcol=0)

b32encode()\와 유사하지만, RFC 4648\에 정의된 확장 16진수 알파벳을 사용합니다.

Added in version 3.10.

버전 3.15에서 변경: padded*와 *wrapcol 매개 변수를 추가했습니다.

base64.b32hexdecode(s, casefold=False, *, padded=True, ignorechars=b'', canonical=False)

b32decode()\와 유사하지만, RFC 4648\에 정의된 확장 16진수 알파벳을 사용합니다.

이 버전은 숫자 0(영)을 글자 O(오)로, 숫자 1(일)을 글자 I(아이)나 글자 L(엘)로 매핑하는 것을 허용하지 않습니다. 이 모든 문자는 확장 16진수 알파벳에 포함되며 상호 교환될 수 없습니다.

Added in version 3.10.

버전 3.15에서 변경: canonical, ignorechars, padded 매개 변수를 추가했습니다.

base64.b16encode(s, *, wrapcol=0)

Base16을 사용하여 바이트열류 객체 s를 인코딩하고 인코딩된 bytes를 반환합니다.

wrapcol\은 출력에 줄 바꿈 (b'\\n') 문자가 최대 wrapcol\ 문자마다 추가되어야 하는지를 제어합니다. wrapcol\이 0이라면 (기본값), 새 줄을 추가하지 않습니다.

버전 3.15에서 변경: wrapcol\ 매개 변수가 추가되었습니다.

base64.b16decode(s, casefold=False, *, ignorechars=b'')

Base16으로 인코딩된 바이트열류 객체나 ASCII 문자열 s를 디코딩하고 디코딩된 bytes를 반환합니다.

선택적 casefold는 소문자 알파벳을 입력으로 사용할 수 있는지를 지정하는 플래그입니다. 보안을 위해, 기본값은 False입니다.

ignorechars\는 입력에서 무시할 문자가 포함된 :term:`바이트열류 객체 <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 문자 집합.

  • 공백과 널 바이트 시퀀스의 간결한 인코딩.

  • 입력에 적용된 패딩 바이트의 인코딩.

더 자세한 내용은 개별 함수의 문서를 참조하십시오.

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\가 수행하는 것과 같이 입력 끝에 적용된 패딩이 출력 인코딩에 완전히 보존되는지를 제어합니다. 이는 데이터를 보존하지 않기 때문에 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\는 <~\ 및 ~>\ 마커의 존재 여부를 제어합니다. 선행 <~\는 필수가 아니지만, 입력은 ~>\로 끝나야 하며, 그렇지 않으면 :exc:`ValueError`가 발생합니다.

ignorechars\는 입력에서 무시할 문자가 포함된 :term:`바이트열류 객체 <bytes-like object>`입니다. 여기에는 공백 문자만 포함되어야 하며, 기본적으로 ASCII의 모든 공백 문자가 포함됩니다.

canonical\이 True\라면, 비(非)정규식 인코딩은 거부됩니다. 자세한 내용은 binascii.a2b_ascii85()\를 참조하십시오.

Added in version 3.4.

버전 3.15에서 변경: canonical\ 매개 변수가 추가되었습니다. 단일 문자로 된 마지막 그룹은 이제 인코딩 위반으로 항상 거부됩니다.

base64.b85encode(b, pad=False, *, wrapcol=0)

base85를 사용하여 바이트열류 객체 b를 인코딩하고 (예를 들어 git 스타일 바이너리 diff에서 사용되는 것처럼), 인코딩된 bytes를 반환합니다.

pad \가 참이면, 입력은 b'\\0' \으로 채워져서 길이는 인코딩 전에 4바이트의 배수가 됩니다. 만약 pad 가 참이면, 결과로 생성된 모든 문자는 출력에 보존되며, 이 출력은 항상 5바이트의 배수가 되므로, 디코딩 시 데이터의 길이가 보존되지 않을 수 있습니다.

wrapcol\은 출력에 줄 바꿈 (b'\\n') 문자가 최대 wrapcol\ 문자마다 추가되어야 하는지를 제어합니다. wrapcol\이 0이라면 (기본값), 새 줄을 추가하지 않습니다.

Added in version 3.4.

버전 3.15에서 변경: wrapcol\ 매개 변수가 추가되었습니다.

base64.b85decode(b, *, ignorechars=b'', canonical=False)

바이트열류 객체\나 ASCII 문자열 b\를 base85로 인코딩된 내용을 디코딩하고 디코딩된 bytes\를 반환합니다.

ignorechars\는 입력에서 무시할 문자가 포함된 :term:`바이트열류 객체 <bytes-like object>`입니다.

만약 canonical 이 참이면, 비표준 인코딩은 거부됩니다. 자세한 내용은 binascii.a2b_base85() 를 참조하십시오.

Added in version 3.4.

버전 3.15에서 변경: canonicalignorechars 매개 변수가 추가되었습니다. 단일 문자로 이루어진 마지막 그룹은 이제 모두 인코딩 위반으로 거부됩니다.

base64.z85encode(s, pad=False, *, wrapcol=0)

바이트열류 객체 s\를 Z85 (ZeroMQ 에서 사용됨)를 사용하여 인코딩하고, 인코딩된 bytes\를 반환합니다. 더 자세한 내용은 Z85 명세\를 참조하십시오.

입력은 b'\\0' \으로 채워져서 길이가 인코딩 전에 4의 배수가 되도록 패딩됩니다. 만약 pad 가 참이면, 결과로 생성된 모든 문자는 ZeroMQ 표준에서 요구하는 바와 같이 항상 5바이트의 배수로 유지됩니다.

wrapcol\은 출력에 줄 바꿈 (b'\\n') 문자가 최대 wrapcol\ 문자마다 추가되어야 하는지를 제어합니다. 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\는 입력에서 무시할 문자가 포함된 :term:`바이트열류 객체 <bytes-like object>`입니다.

만약 canonical 이 참이면, 비표준 인코딩은 거부됩니다. 자세한 내용은 binascii.a2b_base85() 를 참조하십시오.

Added in version 3.13.

버전 3.15에서 변경: canonicalignorechars 매개 변수가 추가되었습니다. 단일 문자로 이루어진 마지막 그룹은 이제 모두 인코딩 위반으로 거부됩니다.

레거시 인터페이스

base64.decode(input, output)

바이너리 input 파일의 내용을 디코딩하고 결과 바이너리 데이터를 output 파일에 씁니다. inputoutput파일 객체여야 합니다. inputinput.readline()이 빈 바이트열 객체를 반환할 때까지 읽힙니다.

base64.decodebytes(s)

하나 이상의 base64 인코딩된 데이터 줄을 포함해야 하는 바이트열류 객체 s를 디코딩하고 디코딩된 bytes를 반환합니다.

Added in version 3.1.

base64.encode(input, output)

바이너리 input 파일의 내용을 인코딩하고 base64로 인코딩된 결과 데이터를 output 파일에 씁니다. inputoutput파일 객체여야 합니다. inputinput.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 휴대용 문서 형식 - 파트 2: PDF 2.0

섹션 7.4.3, “ASCII85Decode Filter”는 PDF 및 PostScript에서 사용되는 Ascii85 인코딩 정의를 제공하며, 여기에는 출력 문자 집합과 영 패딩 및 부분 출력 그룹을 사용하여 데이터 길이 보존에 대한 세부 사항이 포함되어 있습니다.

ZeroMQ RFC 32/Z85

“Formal Specification” 섹션은 Z85에서 사용되는 문자 집합을 제공합니다.

분실물 보관소