Home | History | Annotate | Download | only in library
      1 :mod:`base64` --- Base16, Base32, Base64, Base85 Data Encodings
      2 ===============================================================
      3 
      4 .. module:: base64
      5    :synopsis: RFC 3548: Base16, Base32, Base64 Data Encodings;
      6               Base85 and Ascii85
      7 
      8 **Source code:** :source:`Lib/base64.py`
      9 
     10 .. index::
     11    pair: base64; encoding
     12    single: MIME; base64 encoding
     13 
     14 --------------
     15 
     16 This module provides functions for encoding binary data to printable
     17 ASCII characters and decoding such encodings back to binary data.
     18 It provides encoding and decoding functions for the encodings specified in
     19 :rfc:`3548`, which defines the Base16, Base32, and Base64 algorithms,
     20 and for the de-facto standard Ascii85 and Base85 encodings.
     21 
     22 The :rfc:`3548` encodings are suitable for encoding binary data so that it can
     23 safely sent by email, used as parts of URLs, or included as part of an HTTP
     24 POST request.  The encoding algorithm is not the same as the
     25 :program:`uuencode` program.
     26 
     27 There are two interfaces provided by this module.  The modern interface
     28 supports encoding :term:`bytes-like objects <bytes-like object>` to ASCII
     29 :class:`bytes`, and decoding :term:`bytes-like objects <bytes-like object>` or
     30 strings containing ASCII to :class:`bytes`.  Both base-64 alphabets
     31 defined in :rfc:`3548` (normal, and URL- and filesystem-safe) are supported.
     32 
     33 The legacy interface does not support decoding from strings, but it does
     34 provide functions for encoding and decoding to and from :term:`file objects
     35 <file object>`.  It only supports the Base64 standard alphabet, and it adds
     36 newlines every 76 characters as per :rfc:`2045`.  Note that if you are looking
     37 for :rfc:`2045` support you probably want to be looking at the :mod:`email`
     38 package instead.
     39 
     40 
     41 .. versionchanged:: 3.3
     42    ASCII-only Unicode strings are now accepted by the decoding functions of
     43    the modern interface.
     44 
     45 .. versionchanged:: 3.4
     46    Any :term:`bytes-like objects <bytes-like object>` are now accepted by all
     47    encoding and decoding functions in this module.  Ascii85/Base85 support added.
     48 
     49 The modern interface provides:
     50 
     51 .. function:: b64encode(s, altchars=None)
     52 
     53    Encode the :term:`bytes-like object` *s* using Base64 and return the encoded
     54    :class:`bytes`.
     55 
     56    Optional *altchars* must be a :term:`bytes-like object` of at least
     57    length 2 (additional characters are ignored) which specifies an alternative
     58    alphabet for the ``+`` and ``/`` characters.  This allows an application to e.g.
     59    generate URL or filesystem safe Base64 strings.  The default is ``None``, for
     60    which the standard Base64 alphabet is used.
     61 
     62 
     63 .. function:: b64decode(s, altchars=None, validate=False)
     64 
     65    Decode the Base64 encoded :term:`bytes-like object` or ASCII string
     66    *s* and return the decoded :class:`bytes`.
     67 
     68    Optional *altchars* must be a :term:`bytes-like object` or ASCII string of
     69    at least length 2 (additional characters are ignored) which specifies the
     70    alternative alphabet used instead of the ``+`` and ``/`` characters.
     71 
     72    A :exc:`binascii.Error` exception is raised
     73    if *s* is incorrectly padded.
     74 
     75    If *validate* is ``False`` (the default), characters that are neither
     76    in the normal base-64 alphabet nor the alternative alphabet are
     77    discarded prior to the padding check.  If *validate* is ``True``,
     78    these non-alphabet characters in the input result in a
     79    :exc:`binascii.Error`.
     80 
     81 
     82 .. function:: standard_b64encode(s)
     83 
     84    Encode :term:`bytes-like object` *s* using the standard Base64 alphabet
     85    and return the encoded :class:`bytes`.
     86 
     87 
     88 .. function:: standard_b64decode(s)
     89 
     90    Decode :term:`bytes-like object` or ASCII string *s* using the standard
     91    Base64 alphabet and return the decoded :class:`bytes`.
     92 
     93 
     94 .. function:: urlsafe_b64encode(s)
     95 
     96    Encode :term:`bytes-like object` *s* using the
     97    URL- and filesystem-safe alphabet, which
     98    substitutes ``-`` instead of ``+`` and ``_`` instead of ``/`` in the
     99    standard Base64 alphabet, and return the encoded :class:`bytes`.  The result
    100    can still contain ``=``.
    101 
    102 
    103 .. function:: urlsafe_b64decode(s)
    104 
    105    Decode :term:`bytes-like object` or ASCII string *s*
    106    using the URL- and filesystem-safe
    107    alphabet, which substitutes ``-`` instead of ``+`` and ``_`` instead of
    108    ``/`` in the standard Base64 alphabet, and return the decoded
    109    :class:`bytes`.
    110 
    111 
    112 .. function:: b32encode(s)
    113 
    114    Encode the :term:`bytes-like object` *s* using Base32 and return the
    115    encoded :class:`bytes`.
    116 
    117 
    118 .. function:: b32decode(s, casefold=False, map01=None)
    119 
    120    Decode the Base32 encoded :term:`bytes-like object` or ASCII string *s* and
    121    return the decoded :class:`bytes`.
    122 
    123    Optional *casefold* is a flag specifying
    124    whether a lowercase alphabet is acceptable as input.  For security purposes,
    125    the default is ``False``.
    126 
    127    :rfc:`3548` allows for optional mapping of the digit 0 (zero) to the letter O
    128    (oh), and for optional mapping of the digit 1 (one) to either the letter I (eye)
    129    or letter L (el).  The optional argument *map01* when not ``None``, specifies
    130    which letter the digit 1 should be mapped to (when *map01* is not ``None``, the
    131    digit 0 is always mapped to the letter O).  For security purposes the default is
    132    ``None``, so that 0 and 1 are not allowed in the input.
    133 
    134    A :exc:`binascii.Error` is raised if *s* is
    135    incorrectly padded or if there are non-alphabet characters present in the
    136    input.
    137 
    138 
    139 .. function:: b16encode(s)
    140 
    141    Encode the :term:`bytes-like object` *s* using Base16 and return the
    142    encoded :class:`bytes`.
    143 
    144 
    145 .. function:: b16decode(s, casefold=False)
    146 
    147    Decode the Base16 encoded :term:`bytes-like object` or ASCII string *s* and
    148    return the decoded :class:`bytes`.
    149 
    150    Optional *casefold* is a flag specifying whether a
    151    lowercase alphabet is acceptable as input.  For security purposes, the default
    152    is ``False``.
    153 
    154    A :exc:`binascii.Error` is raised if *s* is
    155    incorrectly padded or if there are non-alphabet characters present in the
    156    input.
    157 
    158 
    159 .. function:: a85encode(b, *, foldspaces=False, wrapcol=0, pad=False, adobe=False)
    160 
    161    Encode the :term:`bytes-like object` *b* using Ascii85 and return the
    162    encoded :class:`bytes`.
    163 
    164    *foldspaces* is an optional flag that uses the special short sequence 'y'
    165    instead of 4 consecutive spaces (ASCII 0x20) as supported by 'btoa'. This
    166    feature is not supported by the "standard" Ascii85 encoding.
    167 
    168    *wrapcol* controls whether the output should have newline (``b'\n'``)
    169    characters added to it. If this is non-zero, each output line will be
    170    at most this many characters long.
    171 
    172    *pad* controls whether the input is padded to a multiple of 4
    173    before encoding. Note that the ``btoa`` implementation always pads.
    174 
    175    *adobe* controls whether the encoded byte sequence is framed with ``<~``
    176    and ``~>``, which is used by the Adobe implementation.
    177 
    178    .. versionadded:: 3.4
    179 
    180 
    181 .. function:: a85decode(b, *, foldspaces=False, adobe=False, ignorechars=b' \\t\\n\\r\\v')
    182 
    183    Decode the Ascii85 encoded :term:`bytes-like object` or ASCII string *b* and
    184    return the decoded :class:`bytes`.
    185 
    186    *foldspaces* is a flag that specifies whether the 'y' short sequence
    187    should be accepted as shorthand for 4 consecutive spaces (ASCII 0x20).
    188    This feature is not supported by the "standard" Ascii85 encoding.
    189 
    190    *adobe* controls whether the input sequence is in Adobe Ascii85 format
    191    (i.e. is framed with <~ and ~>).
    192 
    193    *ignorechars* should be a :term:`bytes-like object` or ASCII string
    194    containing characters to ignore
    195    from the input. This should only contain whitespace characters, and by
    196    default contains all whitespace characters in ASCII.
    197 
    198    .. versionadded:: 3.4
    199 
    200 
    201 .. function:: b85encode(b, pad=False)
    202 
    203    Encode the :term:`bytes-like object` *b* using base85 (as used in e.g.
    204    git-style binary diffs) and return the encoded :class:`bytes`.
    205 
    206    If *pad* is true, the input is padded with ``b'\0'`` so its length is a
    207    multiple of 4 bytes before encoding.
    208 
    209    .. versionadded:: 3.4
    210 
    211 
    212 .. function:: b85decode(b)
    213 
    214    Decode the base85-encoded :term:`bytes-like object` or ASCII string *b* and
    215    return the decoded :class:`bytes`.  Padding is implicitly removed, if
    216    necessary.
    217 
    218    .. versionadded:: 3.4
    219 
    220 
    221 .. note::
    222    Both Base85 and Ascii85 have an expansion factor of 5 to 4 (5 Base85 or
    223    Ascii85 characters can encode 4 binary bytes), while the better-known
    224    Base64 has an expansion factor of 6 to 4.  They are therefore more
    225    efficient when space expensive.  They differ by details such as the
    226    character map used for encoding.
    227 
    228 
    229 The legacy interface:
    230 
    231 .. function:: decode(input, output)
    232 
    233    Decode the contents of the binary *input* file and write the resulting binary
    234    data to the *output* file. *input* and *output* must be :term:`file objects
    235    <file object>`. *input* will be read until ``input.readline()`` returns an
    236    empty bytes object.
    237 
    238 
    239 .. function:: decodebytes(s)
    240 
    241    Decode the :term:`bytes-like object` *s*, which must contain one or more
    242    lines of base64 encoded data, and return the decoded :class:`bytes`.
    243 
    244    .. versionadded:: 3.1
    245 
    246 .. function:: decodestring(s)
    247 
    248    Deprecated alias of :func:`decodebytes`.
    249 
    250    .. deprecated:: 3.1
    251 
    252 
    253 .. function:: encode(input, output)
    254 
    255    Encode the contents of the binary *input* file and write the resulting base64
    256    encoded data to the *output* file. *input* and *output* must be :term:`file
    257    objects <file object>`. *input* will be read until ``input.read()`` returns
    258    an empty bytes object. :func:`encode` inserts a newline character (``b'\n'``)
    259    after every 76 bytes of the output, as well as ensuring that the output
    260    always ends with a newline, as per :rfc:`2045` (MIME).
    261 
    262 
    263 .. function:: encodebytes(s)
    264 
    265    Encode the :term:`bytes-like object` *s*, which can contain arbitrary binary
    266    data, and return :class:`bytes` containing the base64-encoded data, with newlines
    267    (``b'\n'``) inserted after every 76 bytes of output, and ensuring that
    268    there is a trailing newline, as per :rfc:`2045` (MIME).
    269 
    270    .. versionadded:: 3.1
    271 
    272 .. function:: encodestring(s)
    273 
    274    Deprecated alias of :func:`encodebytes`.
    275 
    276    .. deprecated:: 3.1
    277 
    278 
    279 An example usage of the module:
    280 
    281    >>> import base64
    282    >>> encoded = base64.b64encode(b'data to be encoded')
    283    >>> encoded
    284    b'ZGF0YSB0byBiZSBlbmNvZGVk'
    285    >>> data = base64.b64decode(encoded)
    286    >>> data
    287    b'data to be encoded'
    288 
    289 
    290 .. seealso::
    291 
    292    Module :mod:`binascii`
    293       Support module containing ASCII-to-binary and binary-to-ASCII conversions.
    294 
    295    :rfc:`1521` - MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies
    296       Section 5.2, "Base64 Content-Transfer-Encoding," provides the definition of the
    297       base64 encoding.
    298 
    299