base64
— Base16, Base32, Base64, Base85 Data Encodings¶
Source code:Lib/base64.py
This module provides functions for encoding binary data to printableASCII characters and decoding such encodings back to binary data.This includes theencodings specified inRFC 4648 (Base64, Base32 and Base16)and the non-standardBase85 encodings.
There are two interfaces provided by this module. The modern interfacesupports encodingbytes-like objects to ASCIIbytes
, and decodingbytes-like objects orstrings containing ASCII tobytes
. Both base-64 alphabetsdefined inRFC 4648 (normal, and URL- and filesystem-safe) are supported.
Thelegacy interface does not support decoding from strings, but it doesprovide functions for encoding and decoding to and fromfile objects. It only supports the Base64 standard alphabet, and it addsnewlines every 76 characters as perRFC 2045. Note that if you are lookingforRFC 2045 support you probably want to be looking at theemail
package instead.
Changed in version 3.3:ASCII-only Unicode strings are now accepted by the decoding functions ofthe modern interface.
Changed in version 3.4:Anybytes-like objects are now accepted by allencoding and decoding functions in this module. Ascii85/Base85 support added.
RFC 4648 Encodings¶
TheRFC 4648 encodings are suitable for encoding binary data so that it can besafely sent by email, used as parts of URLs, or included as part of an HTTPPOST request.
- base64.b64encode(s,altchars=None)¶
Encode thebytes-like objects using Base64 and return the encoded
bytes
.Optionalaltchars must be abytes-like object of length 2 whichspecifies an alternative alphabet for the
+
and/
characters.This allows an application to e.g. generate URL or filesystem safe Base64strings. The default isNone
, for which the standard Base64 alphabet is used.May assert or raise a
ValueError
if the length ofaltchars is not 2. Raises aTypeError
ifaltchars is not abytes-like object.
- base64.b64decode(s,altchars=None,validate=False)¶
Decode the Base64 encodedbytes-like object or ASCII strings and return the decoded
bytes
.Optionalaltchars must be abytes-like object or ASCII stringof length 2 which specifies the alternative alphabet used instead of the
+
and/
characters.A
binascii.Error
exception is raisedifs is incorrectly padded.Ifvalidate is
False
(the default), characters that are neitherin the normal base-64 alphabet nor the alternative alphabet arediscarded prior to the padding check. Ifvalidate isTrue
,these non-alphabet characters in the input result in abinascii.Error
.For more information about the strict base64 check, see
binascii.a2b_base64()
May assert or raise a
ValueError
if the length ofaltchars is not 2.
- base64.standard_b64encode(s)¶
Encodebytes-like objects using the standard Base64 alphabetand return the encoded
bytes
.
- base64.standard_b64decode(s)¶
Decodebytes-like object or ASCII strings using the standardBase64 alphabet and return the decoded
bytes
.
- base64.urlsafe_b64encode(s)¶
Encodebytes-like objects using theURL- and filesystem-safe alphabet, whichsubstitutes
-
instead of+
and_
instead of/
in thestandard Base64 alphabet, and return the encodedbytes
. The resultcan still contain=
.
- base64.urlsafe_b64decode(s)¶
Decodebytes-like object or ASCII stringsusing the URL- and filesystem-safealphabet, which substitutes
-
instead of+
and_
instead of/
in the standard Base64 alphabet, and return the decodedbytes
.
- base64.b32encode(s)¶
Encode thebytes-like objects using Base32 and return theencoded
bytes
.
- base64.b32decode(s,casefold=False,map01=None)¶
Decode the Base32 encodedbytes-like object or ASCII strings andreturn the decoded
bytes
.Optionalcasefold is a flag specifyingwhether a lowercase alphabet is acceptable as input. For security purposes,the default is
False
.RFC 4648 allows for optional mapping of the digit 0 (zero) to the letter O(oh), and for optional mapping of the digit 1 (one) to either the letter I (eye)or letter L (el). The optional argumentmap01 when not
None
, specifieswhich letter the digit 1 should be mapped to (whenmap01 is notNone
, thedigit 0 is always mapped to the letter O). For security purposes the default isNone
, so that 0 and 1 are not allowed in the input.A
binascii.Error
is raised ifs isincorrectly padded or if there are non-alphabet characters present in theinput.
- base64.b32hexencode(s)¶
Similar to
b32encode()
but uses the Extended Hex Alphabet, as defined inRFC 4648.Added in version 3.10.
- base64.b32hexdecode(s,casefold=False)¶
Similar to
b32decode()
but uses the Extended Hex Alphabet, as defined inRFC 4648.This version does not allow the digit 0 (zero) to the letter O (oh) and digit1 (one) to either the letter I (eye) or letter L (el) mappings, all thesecharacters are included in the Extended Hex Alphabet and are notinterchangeable.
Added in version 3.10.
- base64.b16encode(s)¶
Encode thebytes-like objects using Base16 and return theencoded
bytes
.
- base64.b16decode(s,casefold=False)¶
Decode the Base16 encodedbytes-like object or ASCII strings andreturn the decoded
bytes
.Optionalcasefold is a flag specifying whether alowercase alphabet is acceptable as input. For security purposes, the defaultis
False
.A
binascii.Error
is raised ifs isincorrectly padded or if there are non-alphabet characters present in theinput.
Base85 Encodings¶
Base85 encoding is not formally specified but rather a de facto standard,thus different systems perform the encoding differently.
Thea85encode()
andb85encode()
functions in this module are two implementations ofthe de facto standard. You should call the function with the Base85implementation used by the software you intend to work with.
The two functions present in this module differ in how they handle the following:
Whether to include enclosing
<~
and~>
markersWhether to include newline characters
The set of ASCII characters used for encoding
Handling of null bytes
Refer to the documentation of the individual functions for more information.
- base64.a85encode(b,*,foldspaces=False,wrapcol=0,pad=False,adobe=False)¶
Encode thebytes-like objectb using Ascii85 and return theencoded
bytes
.foldspaces is an optional flag that uses the special short sequence ‘y’instead of 4 consecutive spaces (ASCII 0x20) as supported by ‘btoa’. Thisfeature is not supported by the “standard” Ascii85 encoding.
wrapcol controls whether the output should have newline (
b'\n'
)characters added to it. If this is non-zero, each output line will beat most this many characters long, excluding the trailing newline.pad controls whether the input is padded to a multiple of 4before encoding. Note that the
btoa
implementation always pads.adobe controls whether the encoded byte sequence is framed with
<~
and~>
, which is used by the Adobe implementation.Added in version 3.4.
- base64.a85decode(b,*,foldspaces=False,adobe=False,ignorechars=b'\t\n\r\x0b')¶
Decode the Ascii85 encodedbytes-like object or ASCII stringb andreturn the decoded
bytes
.foldspaces is a flag that specifies whether the ‘y’ short sequenceshould be accepted as shorthand for 4 consecutive spaces (ASCII 0x20).This feature is not supported by the “standard” Ascii85 encoding.
adobe controls whether the input sequence is in Adobe Ascii85 format(i.e. is framed with <~ and ~>).
ignorechars should be abytes-like object or ASCII stringcontaining characters to ignorefrom the input. This should only contain whitespace characters, and bydefault contains all whitespace characters in ASCII.
Added in version 3.4.
- base64.b85encode(b,pad=False)¶
Encode thebytes-like objectb using base85 (as used in e.g.git-style binary diffs) and return the encoded
bytes
.Ifpad is true, the input is padded with
b'\0'
so its length is amultiple of 4 bytes before encoding.Added in version 3.4.
- base64.b85decode(b)¶
Decode the base85-encodedbytes-like object or ASCII stringb andreturn the decoded
bytes
. Padding is implicitly removed, ifnecessary.Added in version 3.4.
- base64.z85encode(s)¶
Encode thebytes-like objects using Z85 (as used in ZeroMQ)and return the encoded
bytes
. SeeZ85 specification for more information.Added in version 3.13.
- base64.z85decode(s)¶
Decode the Z85-encodedbytes-like object or ASCII strings andreturn the decoded
bytes
. SeeZ85 specification for more information.Added in version 3.13.
Legacy Interface¶
- base64.decode(input,output)¶
Decode the contents of the binaryinput file and write the resulting binarydata to theoutput file.input andoutput must befile objects.input will be read until
input.readline()
returns anempty bytes object.
- base64.decodebytes(s)¶
Decode thebytes-like objects, which must contain one or morelines of base64 encoded data, and return the decoded
bytes
.Added in version 3.1.
- base64.encode(input,output)¶
Encode the contents of the binaryinput file and write the resulting base64encoded data to theoutput file.input andoutput must befileobjects.input will be read until
input.read()
returnsan empty bytes object.encode()
inserts a newline character (b'\n'
)after every 76 bytes of the output, as well as ensuring that the outputalways ends with a newline, as perRFC 2045 (MIME).
- base64.encodebytes(s)¶
Encode thebytes-like objects, which can contain arbitrary binarydata, and return
bytes
containing the base64-encoded data, with newlines(b'\n'
) inserted after every 76 bytes of output, and ensuring thatthere is a trailing newline, as perRFC 2045 (MIME).Added in version 3.1.
An example usage of the module:
>>>importbase64>>>encoded=base64.b64encode(b'data to be encoded')>>>encodedb'ZGF0YSB0byBiZSBlbmNvZGVk'>>>data=base64.b64decode(encoded)>>>datab'data to be encoded'
Security Considerations¶
A new security considerations section was added toRFC 4648 (section 12); it’srecommended to review the security section for any code deployed to production.
See also
- Module
binascii
Support module containing ASCII-to-binary and binary-to-ASCII conversions.
- RFC 1521 - MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies
Section 5.2, “Base64 Content-Transfer-Encoding,” provides the definition of thebase64 encoding.