blob: afbedce3baae415ffbfa24468e8d1e5f24965404 [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001:mod:`base64` --- RFC 3548: Base16, Base32, Base64 Data Encodings
2=================================================================
3
4.. module:: base64
5 :synopsis: RFC 3548: Base16, Base32, Base64 Data Encodings
6
7
8.. index::
9 pair: base64; encoding
10 single: MIME; base64 encoding
11
12This module provides data encoding and decoding as specified in :rfc:`3548`.
R. David Murray7cefc302010-10-17 23:12:16 +000013This standard defines the Base16, Base32, and Base64 algorithms for encoding
14and decoding arbitrary binary strings into ASCII-only byte strings that can be
15safely sent by email, used as parts of URLs, or included as part of an HTTP
16POST request. The encoding algorithm is not the same as the
17:program:`uuencode` program.
Georg Brandl116aa622007-08-15 14:28:22 +000018
R. David Murray7cefc302010-10-17 23:12:16 +000019There are two interfaces provided by this module. The modern interface
20supports encoding and decoding ASCII byte string objects using all three
Antoine Pitrouea6b4d52012-02-20 19:30:23 +010021alphabets. Additionally, the decoding functions of the modern interface also
22accept Unicode strings containing only ASCII characters. The legacy interface
23provides for encoding and decoding to and from file-like objects as well as
24byte strings, but only using the Base64 standard alphabet.
25
26.. versionchanged:: 3.3
27 ASCII-only Unicode strings are now accepted by the decoding functions of
28 the modern interface.
Georg Brandl116aa622007-08-15 14:28:22 +000029
Georg Brandle6bcc912008-05-12 18:05:20 +000030The modern interface provides:
Georg Brandl116aa622007-08-15 14:28:22 +000031
Georg Brandlb868a662009-04-02 02:56:10 +000032.. function:: b64encode(s, altchars=None)
Georg Brandl116aa622007-08-15 14:28:22 +000033
R. David Murray7cefc302010-10-17 23:12:16 +000034 Encode a byte string using Base64.
Georg Brandl116aa622007-08-15 14:28:22 +000035
36 *s* is the string to encode. Optional *altchars* must be a string of at least
37 length 2 (additional characters are ignored) which specifies an alternative
38 alphabet for the ``+`` and ``/`` characters. This allows an application to e.g.
39 generate URL or filesystem safe Base64 strings. The default is ``None``, for
40 which the standard Base64 alphabet is used.
41
Georg Brandl62e42312010-08-02 20:39:35 +000042 The encoded byte string is returned.
Georg Brandl116aa622007-08-15 14:28:22 +000043
44
R. David Murray64951362010-11-11 20:09:20 +000045.. function:: b64decode(s, altchars=None, validate=False)
Georg Brandl116aa622007-08-15 14:28:22 +000046
Georg Brandl62e42312010-08-02 20:39:35 +000047 Decode a Base64 encoded byte string.
Georg Brandl116aa622007-08-15 14:28:22 +000048
R. David Murray7cefc302010-10-17 23:12:16 +000049 *s* is the byte string to decode. Optional *altchars* must be a string of
50 at least length 2 (additional characters are ignored) which specifies the
51 alternative alphabet used instead of the ``+`` and ``/`` characters.
Georg Brandl116aa622007-08-15 14:28:22 +000052
Éric Araujo941afed2011-09-01 02:47:34 +020053 The decoded string is returned. A :exc:`binascii.Error` exception is raised
54 if *s* is incorrectly padded.
R. David Murray64951362010-11-11 20:09:20 +000055
56 If *validate* is ``False`` (the default), non-base64-alphabet characters are
57 discarded prior to the padding check. If *validate* is ``True``,
58 non-base64-alphabet characters in the input result in a
59 :exc:`binascii.Error`.
Georg Brandl116aa622007-08-15 14:28:22 +000060
61
62.. function:: standard_b64encode(s)
63
Georg Brandl62e42312010-08-02 20:39:35 +000064 Encode byte string *s* using the standard Base64 alphabet.
Georg Brandl116aa622007-08-15 14:28:22 +000065
66
67.. function:: standard_b64decode(s)
68
Georg Brandl62e42312010-08-02 20:39:35 +000069 Decode byte string *s* using the standard Base64 alphabet.
Georg Brandl116aa622007-08-15 14:28:22 +000070
71
72.. function:: urlsafe_b64encode(s)
73
Georg Brandl62e42312010-08-02 20:39:35 +000074 Encode byte string *s* using a URL-safe alphabet, which substitutes ``-`` instead of
Benjamin Petersond75fcb42009-02-19 04:22:03 +000075 ``+`` and ``_`` instead of ``/`` in the standard Base64 alphabet. The result
76 can still contain ``=``.
Georg Brandl116aa622007-08-15 14:28:22 +000077
78
79.. function:: urlsafe_b64decode(s)
80
Georg Brandl62e42312010-08-02 20:39:35 +000081 Decode byte string *s* using a URL-safe alphabet, which substitutes ``-`` instead of
Georg Brandl116aa622007-08-15 14:28:22 +000082 ``+`` and ``_`` instead of ``/`` in the standard Base64 alphabet.
83
84
85.. function:: b32encode(s)
86
Georg Brandl62e42312010-08-02 20:39:35 +000087 Encode a byte string using Base32. *s* is the string to encode. The encoded string
Georg Brandl116aa622007-08-15 14:28:22 +000088 is returned.
89
90
Georg Brandlb868a662009-04-02 02:56:10 +000091.. function:: b32decode(s, casefold=False, map01=None)
Georg Brandl116aa622007-08-15 14:28:22 +000092
Georg Brandl62e42312010-08-02 20:39:35 +000093 Decode a Base32 encoded byte string.
Georg Brandl116aa622007-08-15 14:28:22 +000094
R. David Murray7cefc302010-10-17 23:12:16 +000095 *s* is the byte string to decode. Optional *casefold* is a flag specifying
96 whether a lowercase alphabet is acceptable as input. For security purposes,
97 the default is ``False``.
Georg Brandl116aa622007-08-15 14:28:22 +000098
99 :rfc:`3548` allows for optional mapping of the digit 0 (zero) to the letter O
100 (oh), and for optional mapping of the digit 1 (one) to either the letter I (eye)
101 or letter L (el). The optional argument *map01* when not ``None``, specifies
102 which letter the digit 1 should be mapped to (when *map01* is not ``None``, the
103 digit 0 is always mapped to the letter O). For security purposes the default is
104 ``None``, so that 0 and 1 are not allowed in the input.
105
Georg Brandl62e42312010-08-02 20:39:35 +0000106 The decoded byte string is returned. A :exc:`TypeError` is raised if *s* were
Georg Brandl116aa622007-08-15 14:28:22 +0000107 incorrectly padded or if there are non-alphabet characters present in the
108 string.
109
110
111.. function:: b16encode(s)
112
Georg Brandl62e42312010-08-02 20:39:35 +0000113 Encode a byte string using Base16.
Georg Brandl116aa622007-08-15 14:28:22 +0000114
Georg Brandl62e42312010-08-02 20:39:35 +0000115 *s* is the string to encode. The encoded byte string is returned.
Georg Brandl116aa622007-08-15 14:28:22 +0000116
117
Georg Brandlb868a662009-04-02 02:56:10 +0000118.. function:: b16decode(s, casefold=False)
Georg Brandl116aa622007-08-15 14:28:22 +0000119
Georg Brandl62e42312010-08-02 20:39:35 +0000120 Decode a Base16 encoded byte string.
Georg Brandl116aa622007-08-15 14:28:22 +0000121
122 *s* is the string to decode. Optional *casefold* is a flag specifying whether a
123 lowercase alphabet is acceptable as input. For security purposes, the default
124 is ``False``.
125
Georg Brandl62e42312010-08-02 20:39:35 +0000126 The decoded byte string is returned. A :exc:`TypeError` is raised if *s* were
Georg Brandl116aa622007-08-15 14:28:22 +0000127 incorrectly padded or if there are non-alphabet characters present in the
128 string.
129
Georg Brandl116aa622007-08-15 14:28:22 +0000130
Georg Brandlb54d8012009-06-04 09:11:51 +0000131The legacy interface:
Georg Brandl116aa622007-08-15 14:28:22 +0000132
133.. function:: decode(input, output)
134
Georg Brandlb54d8012009-06-04 09:11:51 +0000135 Decode the contents of the binary *input* file and write the resulting binary
Antoine Pitrou11cb9612010-09-15 11:11:28 +0000136 data to the *output* file. *input* and *output* must be :term:`file objects
137 <file object>`. *input* will be read until ``input.read()`` returns an empty
138 bytes object.
Georg Brandl116aa622007-08-15 14:28:22 +0000139
140
Georg Brandlb54d8012009-06-04 09:11:51 +0000141.. function:: decodebytes(s)
142 decodestring(s)
Georg Brandl116aa622007-08-15 14:28:22 +0000143
R. David Murray7cefc302010-10-17 23:12:16 +0000144 Decode the byte string *s*, which must contain one or more lines of base64
145 encoded data, and return a byte string containing the resulting binary data.
Georg Brandlb54d8012009-06-04 09:11:51 +0000146 ``decodestring`` is a deprecated alias.
Georg Brandl116aa622007-08-15 14:28:22 +0000147
148
149.. function:: encode(input, output)
150
Georg Brandlb54d8012009-06-04 09:11:51 +0000151 Encode the contents of the binary *input* file and write the resulting base64
Antoine Pitrou11cb9612010-09-15 11:11:28 +0000152 encoded data to the *output* file. *input* and *output* must be :term:`file
153 objects <file object>`. *input* will be read until ``input.read()`` returns
154 an empty bytes object. :func:`encode` returns the encoded data plus a trailing
155 newline character (``b'\n'``).
Georg Brandl116aa622007-08-15 14:28:22 +0000156
157
Georg Brandlb54d8012009-06-04 09:11:51 +0000158.. function:: encodebytes(s)
159 encodestring(s)
Georg Brandl116aa622007-08-15 14:28:22 +0000160
R. David Murray7cefc302010-10-17 23:12:16 +0000161 Encode the byte string *s*, which can contain arbitrary binary data, and
162 return a byte string containing one or more lines of base64-encoded data.
Georg Brandlb54d8012009-06-04 09:11:51 +0000163 :func:`encodebytes` returns a string containing one or more lines of
164 base64-encoded data always including an extra trailing newline (``b'\n'``).
165 ``encodestring`` is a deprecated alias.
166
Georg Brandl116aa622007-08-15 14:28:22 +0000167
Christian Heimesfe337bf2008-03-23 21:54:12 +0000168An example usage of the module:
Georg Brandl116aa622007-08-15 14:28:22 +0000169
170 >>> import base64
Georg Brandl134c35b2010-10-17 11:36:28 +0000171 >>> encoded = base64.b64encode(b'data to be encoded')
Georg Brandl116aa622007-08-15 14:28:22 +0000172 >>> encoded
Georg Brandl38d54f72009-01-18 10:43:58 +0000173 b'ZGF0YSB0byBiZSBlbmNvZGVk'
Georg Brandl116aa622007-08-15 14:28:22 +0000174 >>> data = base64.b64decode(encoded)
175 >>> data
Georg Brandl134c35b2010-10-17 11:36:28 +0000176 b'data to be encoded'
Georg Brandl116aa622007-08-15 14:28:22 +0000177
178
179.. seealso::
180
181 Module :mod:`binascii`
182 Support module containing ASCII-to-binary and binary-to-ASCII conversions.
183
184 :rfc:`1521` - MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies
185 Section 5.2, "Base64 Content-Transfer-Encoding," provides the definition of the
186 base64 encoding.
187