17db96d56Sopenharmony_ci:mod:`base64` --- Base16, Base32, Base64, Base85 Data Encodings 27db96d56Sopenharmony_ci=============================================================== 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_ci.. module:: base64 57db96d56Sopenharmony_ci :synopsis: RFC 4648: Base16, Base32, Base64 Data Encodings; 67db96d56Sopenharmony_ci Base85 and Ascii85 77db96d56Sopenharmony_ci 87db96d56Sopenharmony_ci**Source code:** :source:`Lib/base64.py` 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_ci.. index:: 117db96d56Sopenharmony_ci pair: base64; encoding 127db96d56Sopenharmony_ci single: MIME; base64 encoding 137db96d56Sopenharmony_ci 147db96d56Sopenharmony_ci-------------- 157db96d56Sopenharmony_ci 167db96d56Sopenharmony_ciThis module provides functions for encoding binary data to printable 177db96d56Sopenharmony_ciASCII characters and decoding such encodings back to binary data. 187db96d56Sopenharmony_ciIt provides encoding and decoding functions for the encodings specified in 197db96d56Sopenharmony_ci:rfc:`4648`, which defines the Base16, Base32, and Base64 algorithms, 207db96d56Sopenharmony_ciand for the de-facto standard Ascii85 and Base85 encodings. 217db96d56Sopenharmony_ci 227db96d56Sopenharmony_ciThe :rfc:`4648` encodings are suitable for encoding binary data so that it can be 237db96d56Sopenharmony_cisafely sent by email, used as parts of URLs, or included as part of an HTTP 247db96d56Sopenharmony_ciPOST request. The encoding algorithm is not the same as the 257db96d56Sopenharmony_ci:program:`uuencode` program. 267db96d56Sopenharmony_ci 277db96d56Sopenharmony_ciThere are two interfaces provided by this module. The modern interface 287db96d56Sopenharmony_cisupports encoding :term:`bytes-like objects <bytes-like object>` to ASCII 297db96d56Sopenharmony_ci:class:`bytes`, and decoding :term:`bytes-like objects <bytes-like object>` or 307db96d56Sopenharmony_cistrings containing ASCII to :class:`bytes`. Both base-64 alphabets 317db96d56Sopenharmony_cidefined in :rfc:`4648` (normal, and URL- and filesystem-safe) are supported. 327db96d56Sopenharmony_ci 337db96d56Sopenharmony_ciThe legacy interface does not support decoding from strings, but it does 347db96d56Sopenharmony_ciprovide functions for encoding and decoding to and from :term:`file objects 357db96d56Sopenharmony_ci<file object>`. It only supports the Base64 standard alphabet, and it adds 367db96d56Sopenharmony_cinewlines every 76 characters as per :rfc:`2045`. Note that if you are looking 377db96d56Sopenharmony_cifor :rfc:`2045` support you probably want to be looking at the :mod:`email` 387db96d56Sopenharmony_cipackage instead. 397db96d56Sopenharmony_ci 407db96d56Sopenharmony_ci 417db96d56Sopenharmony_ci.. versionchanged:: 3.3 427db96d56Sopenharmony_ci ASCII-only Unicode strings are now accepted by the decoding functions of 437db96d56Sopenharmony_ci the modern interface. 447db96d56Sopenharmony_ci 457db96d56Sopenharmony_ci.. versionchanged:: 3.4 467db96d56Sopenharmony_ci Any :term:`bytes-like objects <bytes-like object>` are now accepted by all 477db96d56Sopenharmony_ci encoding and decoding functions in this module. Ascii85/Base85 support added. 487db96d56Sopenharmony_ci 497db96d56Sopenharmony_ciThe modern interface provides: 507db96d56Sopenharmony_ci 517db96d56Sopenharmony_ci.. function:: b64encode(s, altchars=None) 527db96d56Sopenharmony_ci 537db96d56Sopenharmony_ci Encode the :term:`bytes-like object` *s* using Base64 and return the encoded 547db96d56Sopenharmony_ci :class:`bytes`. 557db96d56Sopenharmony_ci 567db96d56Sopenharmony_ci Optional *altchars* must be a :term:`bytes-like object` of length 2 which 577db96d56Sopenharmony_ci specifies an alternative alphabet for the ``+`` and ``/`` characters. 587db96d56Sopenharmony_ci This allows an application to e.g. generate URL or filesystem safe Base64 597db96d56Sopenharmony_ci strings. The default is ``None``, for which the standard Base64 alphabet is used. 607db96d56Sopenharmony_ci 617db96d56Sopenharmony_ci May assert or raise a :exc:`ValueError` if the length of *altchars* is not 2. Raises a 627db96d56Sopenharmony_ci :exc:`TypeError` if *altchars* is not a :term:`bytes-like object`. 637db96d56Sopenharmony_ci 647db96d56Sopenharmony_ci 657db96d56Sopenharmony_ci.. function:: b64decode(s, altchars=None, validate=False) 667db96d56Sopenharmony_ci 677db96d56Sopenharmony_ci Decode the Base64 encoded :term:`bytes-like object` or ASCII string 687db96d56Sopenharmony_ci *s* and return the decoded :class:`bytes`. 697db96d56Sopenharmony_ci 707db96d56Sopenharmony_ci Optional *altchars* must be a :term:`bytes-like object` or ASCII string 717db96d56Sopenharmony_ci of length 2 which specifies the alternative alphabet used instead of the 727db96d56Sopenharmony_ci ``+`` and ``/`` characters. 737db96d56Sopenharmony_ci 747db96d56Sopenharmony_ci A :exc:`binascii.Error` exception is raised 757db96d56Sopenharmony_ci if *s* is incorrectly padded. 767db96d56Sopenharmony_ci 777db96d56Sopenharmony_ci If *validate* is ``False`` (the default), characters that are neither 787db96d56Sopenharmony_ci in the normal base-64 alphabet nor the alternative alphabet are 797db96d56Sopenharmony_ci discarded prior to the padding check. If *validate* is ``True``, 807db96d56Sopenharmony_ci these non-alphabet characters in the input result in a 817db96d56Sopenharmony_ci :exc:`binascii.Error`. 827db96d56Sopenharmony_ci 837db96d56Sopenharmony_ci For more information about the strict base64 check, see :func:`binascii.a2b_base64` 847db96d56Sopenharmony_ci 857db96d56Sopenharmony_ci May assert or raise a :exc:`ValueError` if the length of *altchars* is not 2. 867db96d56Sopenharmony_ci 877db96d56Sopenharmony_ci.. function:: standard_b64encode(s) 887db96d56Sopenharmony_ci 897db96d56Sopenharmony_ci Encode :term:`bytes-like object` *s* using the standard Base64 alphabet 907db96d56Sopenharmony_ci and return the encoded :class:`bytes`. 917db96d56Sopenharmony_ci 927db96d56Sopenharmony_ci 937db96d56Sopenharmony_ci.. function:: standard_b64decode(s) 947db96d56Sopenharmony_ci 957db96d56Sopenharmony_ci Decode :term:`bytes-like object` or ASCII string *s* using the standard 967db96d56Sopenharmony_ci Base64 alphabet and return the decoded :class:`bytes`. 977db96d56Sopenharmony_ci 987db96d56Sopenharmony_ci 997db96d56Sopenharmony_ci.. function:: urlsafe_b64encode(s) 1007db96d56Sopenharmony_ci 1017db96d56Sopenharmony_ci Encode :term:`bytes-like object` *s* using the 1027db96d56Sopenharmony_ci URL- and filesystem-safe alphabet, which 1037db96d56Sopenharmony_ci substitutes ``-`` instead of ``+`` and ``_`` instead of ``/`` in the 1047db96d56Sopenharmony_ci standard Base64 alphabet, and return the encoded :class:`bytes`. The result 1057db96d56Sopenharmony_ci can still contain ``=``. 1067db96d56Sopenharmony_ci 1077db96d56Sopenharmony_ci 1087db96d56Sopenharmony_ci.. function:: urlsafe_b64decode(s) 1097db96d56Sopenharmony_ci 1107db96d56Sopenharmony_ci Decode :term:`bytes-like object` or ASCII string *s* 1117db96d56Sopenharmony_ci using the URL- and filesystem-safe 1127db96d56Sopenharmony_ci alphabet, which substitutes ``-`` instead of ``+`` and ``_`` instead of 1137db96d56Sopenharmony_ci ``/`` in the standard Base64 alphabet, and return the decoded 1147db96d56Sopenharmony_ci :class:`bytes`. 1157db96d56Sopenharmony_ci 1167db96d56Sopenharmony_ci 1177db96d56Sopenharmony_ci.. function:: b32encode(s) 1187db96d56Sopenharmony_ci 1197db96d56Sopenharmony_ci Encode the :term:`bytes-like object` *s* using Base32 and return the 1207db96d56Sopenharmony_ci encoded :class:`bytes`. 1217db96d56Sopenharmony_ci 1227db96d56Sopenharmony_ci 1237db96d56Sopenharmony_ci.. function:: b32decode(s, casefold=False, map01=None) 1247db96d56Sopenharmony_ci 1257db96d56Sopenharmony_ci Decode the Base32 encoded :term:`bytes-like object` or ASCII string *s* and 1267db96d56Sopenharmony_ci return the decoded :class:`bytes`. 1277db96d56Sopenharmony_ci 1287db96d56Sopenharmony_ci Optional *casefold* is a flag specifying 1297db96d56Sopenharmony_ci whether a lowercase alphabet is acceptable as input. For security purposes, 1307db96d56Sopenharmony_ci the default is ``False``. 1317db96d56Sopenharmony_ci 1327db96d56Sopenharmony_ci :rfc:`4648` allows for optional mapping of the digit 0 (zero) to the letter O 1337db96d56Sopenharmony_ci (oh), and for optional mapping of the digit 1 (one) to either the letter I (eye) 1347db96d56Sopenharmony_ci or letter L (el). The optional argument *map01* when not ``None``, specifies 1357db96d56Sopenharmony_ci which letter the digit 1 should be mapped to (when *map01* is not ``None``, the 1367db96d56Sopenharmony_ci digit 0 is always mapped to the letter O). For security purposes the default is 1377db96d56Sopenharmony_ci ``None``, so that 0 and 1 are not allowed in the input. 1387db96d56Sopenharmony_ci 1397db96d56Sopenharmony_ci A :exc:`binascii.Error` is raised if *s* is 1407db96d56Sopenharmony_ci incorrectly padded or if there are non-alphabet characters present in the 1417db96d56Sopenharmony_ci input. 1427db96d56Sopenharmony_ci 1437db96d56Sopenharmony_ci 1447db96d56Sopenharmony_ci.. function:: b32hexencode(s) 1457db96d56Sopenharmony_ci 1467db96d56Sopenharmony_ci Similar to :func:`b32encode` but uses the Extended Hex Alphabet, as defined in 1477db96d56Sopenharmony_ci :rfc:`4648`. 1487db96d56Sopenharmony_ci 1497db96d56Sopenharmony_ci .. versionadded:: 3.10 1507db96d56Sopenharmony_ci 1517db96d56Sopenharmony_ci 1527db96d56Sopenharmony_ci.. function:: b32hexdecode(s, casefold=False) 1537db96d56Sopenharmony_ci 1547db96d56Sopenharmony_ci Similar to :func:`b32decode` but uses the Extended Hex Alphabet, as defined in 1557db96d56Sopenharmony_ci :rfc:`4648`. 1567db96d56Sopenharmony_ci 1577db96d56Sopenharmony_ci This version does not allow the digit 0 (zero) to the letter O (oh) and digit 1587db96d56Sopenharmony_ci 1 (one) to either the letter I (eye) or letter L (el) mappings, all these 1597db96d56Sopenharmony_ci characters are included in the Extended Hex Alphabet and are not 1607db96d56Sopenharmony_ci interchangeable. 1617db96d56Sopenharmony_ci 1627db96d56Sopenharmony_ci .. versionadded:: 3.10 1637db96d56Sopenharmony_ci 1647db96d56Sopenharmony_ci 1657db96d56Sopenharmony_ci.. function:: b16encode(s) 1667db96d56Sopenharmony_ci 1677db96d56Sopenharmony_ci Encode the :term:`bytes-like object` *s* using Base16 and return the 1687db96d56Sopenharmony_ci encoded :class:`bytes`. 1697db96d56Sopenharmony_ci 1707db96d56Sopenharmony_ci 1717db96d56Sopenharmony_ci.. function:: b16decode(s, casefold=False) 1727db96d56Sopenharmony_ci 1737db96d56Sopenharmony_ci Decode the Base16 encoded :term:`bytes-like object` or ASCII string *s* and 1747db96d56Sopenharmony_ci return the decoded :class:`bytes`. 1757db96d56Sopenharmony_ci 1767db96d56Sopenharmony_ci Optional *casefold* is a flag specifying whether a 1777db96d56Sopenharmony_ci lowercase alphabet is acceptable as input. For security purposes, the default 1787db96d56Sopenharmony_ci is ``False``. 1797db96d56Sopenharmony_ci 1807db96d56Sopenharmony_ci A :exc:`binascii.Error` is raised if *s* is 1817db96d56Sopenharmony_ci incorrectly padded or if there are non-alphabet characters present in the 1827db96d56Sopenharmony_ci input. 1837db96d56Sopenharmony_ci 1847db96d56Sopenharmony_ci 1857db96d56Sopenharmony_ci.. function:: a85encode(b, *, foldspaces=False, wrapcol=0, pad=False, adobe=False) 1867db96d56Sopenharmony_ci 1877db96d56Sopenharmony_ci Encode the :term:`bytes-like object` *b* using Ascii85 and return the 1887db96d56Sopenharmony_ci encoded :class:`bytes`. 1897db96d56Sopenharmony_ci 1907db96d56Sopenharmony_ci *foldspaces* is an optional flag that uses the special short sequence 'y' 1917db96d56Sopenharmony_ci instead of 4 consecutive spaces (ASCII 0x20) as supported by 'btoa'. This 1927db96d56Sopenharmony_ci feature is not supported by the "standard" Ascii85 encoding. 1937db96d56Sopenharmony_ci 1947db96d56Sopenharmony_ci *wrapcol* controls whether the output should have newline (``b'\n'``) 1957db96d56Sopenharmony_ci characters added to it. If this is non-zero, each output line will be 1967db96d56Sopenharmony_ci at most this many characters long. 1977db96d56Sopenharmony_ci 1987db96d56Sopenharmony_ci *pad* controls whether the input is padded to a multiple of 4 1997db96d56Sopenharmony_ci before encoding. Note that the ``btoa`` implementation always pads. 2007db96d56Sopenharmony_ci 2017db96d56Sopenharmony_ci *adobe* controls whether the encoded byte sequence is framed with ``<~`` 2027db96d56Sopenharmony_ci and ``~>``, which is used by the Adobe implementation. 2037db96d56Sopenharmony_ci 2047db96d56Sopenharmony_ci .. versionadded:: 3.4 2057db96d56Sopenharmony_ci 2067db96d56Sopenharmony_ci 2077db96d56Sopenharmony_ci.. function:: a85decode(b, *, foldspaces=False, adobe=False, ignorechars=b' \t\n\r\v') 2087db96d56Sopenharmony_ci 2097db96d56Sopenharmony_ci Decode the Ascii85 encoded :term:`bytes-like object` or ASCII string *b* and 2107db96d56Sopenharmony_ci return the decoded :class:`bytes`. 2117db96d56Sopenharmony_ci 2127db96d56Sopenharmony_ci *foldspaces* is a flag that specifies whether the 'y' short sequence 2137db96d56Sopenharmony_ci should be accepted as shorthand for 4 consecutive spaces (ASCII 0x20). 2147db96d56Sopenharmony_ci This feature is not supported by the "standard" Ascii85 encoding. 2157db96d56Sopenharmony_ci 2167db96d56Sopenharmony_ci *adobe* controls whether the input sequence is in Adobe Ascii85 format 2177db96d56Sopenharmony_ci (i.e. is framed with <~ and ~>). 2187db96d56Sopenharmony_ci 2197db96d56Sopenharmony_ci *ignorechars* should be a :term:`bytes-like object` or ASCII string 2207db96d56Sopenharmony_ci containing characters to ignore 2217db96d56Sopenharmony_ci from the input. This should only contain whitespace characters, and by 2227db96d56Sopenharmony_ci default contains all whitespace characters in ASCII. 2237db96d56Sopenharmony_ci 2247db96d56Sopenharmony_ci .. versionadded:: 3.4 2257db96d56Sopenharmony_ci 2267db96d56Sopenharmony_ci 2277db96d56Sopenharmony_ci.. function:: b85encode(b, pad=False) 2287db96d56Sopenharmony_ci 2297db96d56Sopenharmony_ci Encode the :term:`bytes-like object` *b* using base85 (as used in e.g. 2307db96d56Sopenharmony_ci git-style binary diffs) and return the encoded :class:`bytes`. 2317db96d56Sopenharmony_ci 2327db96d56Sopenharmony_ci If *pad* is true, the input is padded with ``b'\0'`` so its length is a 2337db96d56Sopenharmony_ci multiple of 4 bytes before encoding. 2347db96d56Sopenharmony_ci 2357db96d56Sopenharmony_ci .. versionadded:: 3.4 2367db96d56Sopenharmony_ci 2377db96d56Sopenharmony_ci 2387db96d56Sopenharmony_ci.. function:: b85decode(b) 2397db96d56Sopenharmony_ci 2407db96d56Sopenharmony_ci Decode the base85-encoded :term:`bytes-like object` or ASCII string *b* and 2417db96d56Sopenharmony_ci return the decoded :class:`bytes`. Padding is implicitly removed, if 2427db96d56Sopenharmony_ci necessary. 2437db96d56Sopenharmony_ci 2447db96d56Sopenharmony_ci .. versionadded:: 3.4 2457db96d56Sopenharmony_ci 2467db96d56Sopenharmony_ci 2477db96d56Sopenharmony_ciThe legacy interface: 2487db96d56Sopenharmony_ci 2497db96d56Sopenharmony_ci.. function:: decode(input, output) 2507db96d56Sopenharmony_ci 2517db96d56Sopenharmony_ci Decode the contents of the binary *input* file and write the resulting binary 2527db96d56Sopenharmony_ci data to the *output* file. *input* and *output* must be :term:`file objects 2537db96d56Sopenharmony_ci <file object>`. *input* will be read until ``input.readline()`` returns an 2547db96d56Sopenharmony_ci empty bytes object. 2557db96d56Sopenharmony_ci 2567db96d56Sopenharmony_ci 2577db96d56Sopenharmony_ci.. function:: decodebytes(s) 2587db96d56Sopenharmony_ci 2597db96d56Sopenharmony_ci Decode the :term:`bytes-like object` *s*, which must contain one or more 2607db96d56Sopenharmony_ci lines of base64 encoded data, and return the decoded :class:`bytes`. 2617db96d56Sopenharmony_ci 2627db96d56Sopenharmony_ci .. versionadded:: 3.1 2637db96d56Sopenharmony_ci 2647db96d56Sopenharmony_ci 2657db96d56Sopenharmony_ci.. function:: encode(input, output) 2667db96d56Sopenharmony_ci 2677db96d56Sopenharmony_ci Encode the contents of the binary *input* file and write the resulting base64 2687db96d56Sopenharmony_ci encoded data to the *output* file. *input* and *output* must be :term:`file 2697db96d56Sopenharmony_ci objects <file object>`. *input* will be read until ``input.read()`` returns 2707db96d56Sopenharmony_ci an empty bytes object. :func:`encode` inserts a newline character (``b'\n'``) 2717db96d56Sopenharmony_ci after every 76 bytes of the output, as well as ensuring that the output 2727db96d56Sopenharmony_ci always ends with a newline, as per :rfc:`2045` (MIME). 2737db96d56Sopenharmony_ci 2747db96d56Sopenharmony_ci 2757db96d56Sopenharmony_ci.. function:: encodebytes(s) 2767db96d56Sopenharmony_ci 2777db96d56Sopenharmony_ci Encode the :term:`bytes-like object` *s*, which can contain arbitrary binary 2787db96d56Sopenharmony_ci data, and return :class:`bytes` containing the base64-encoded data, with newlines 2797db96d56Sopenharmony_ci (``b'\n'``) inserted after every 76 bytes of output, and ensuring that 2807db96d56Sopenharmony_ci there is a trailing newline, as per :rfc:`2045` (MIME). 2817db96d56Sopenharmony_ci 2827db96d56Sopenharmony_ci .. versionadded:: 3.1 2837db96d56Sopenharmony_ci 2847db96d56Sopenharmony_ci 2857db96d56Sopenharmony_ciAn example usage of the module: 2867db96d56Sopenharmony_ci 2877db96d56Sopenharmony_ci >>> import base64 2887db96d56Sopenharmony_ci >>> encoded = base64.b64encode(b'data to be encoded') 2897db96d56Sopenharmony_ci >>> encoded 2907db96d56Sopenharmony_ci b'ZGF0YSB0byBiZSBlbmNvZGVk' 2917db96d56Sopenharmony_ci >>> data = base64.b64decode(encoded) 2927db96d56Sopenharmony_ci >>> data 2937db96d56Sopenharmony_ci b'data to be encoded' 2947db96d56Sopenharmony_ci 2957db96d56Sopenharmony_ci.. _base64-security: 2967db96d56Sopenharmony_ci 2977db96d56Sopenharmony_ciSecurity Considerations 2987db96d56Sopenharmony_ci----------------------- 2997db96d56Sopenharmony_ci 3007db96d56Sopenharmony_ciA new security considerations section was added to :rfc:`4648` (section 12); it's 3017db96d56Sopenharmony_cirecommended to review the security section for any code deployed to production. 3027db96d56Sopenharmony_ci 3037db96d56Sopenharmony_ci.. seealso:: 3047db96d56Sopenharmony_ci 3057db96d56Sopenharmony_ci Module :mod:`binascii` 3067db96d56Sopenharmony_ci Support module containing ASCII-to-binary and binary-to-ASCII conversions. 3077db96d56Sopenharmony_ci 3087db96d56Sopenharmony_ci :rfc:`1521` - MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies 3097db96d56Sopenharmony_ci Section 5.2, "Base64 Content-Transfer-Encoding," provides the definition of the 3107db96d56Sopenharmony_ci base64 encoding. 3117db96d56Sopenharmony_ci 312