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