blob: 2401ae7a1320500783282c039f7ea26c59f57dd2 [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
21alphabets. The legacy interface provides for encoding and decoding to and from
22file-like objects as well as byte strings, but only using the Base64 standard
23alphabet.
Georg Brandl116aa622007-08-15 14:28:22 +000024
Georg Brandle6bcc912008-05-12 18:05:20 +000025The modern interface provides:
Georg Brandl116aa622007-08-15 14:28:22 +000026
Georg Brandlb868a662009-04-02 02:56:10 +000027.. function:: b64encode(s, altchars=None)
Georg Brandl116aa622007-08-15 14:28:22 +000028
R. David Murray7cefc302010-10-17 23:12:16 +000029 Encode a byte string using Base64.
Georg Brandl116aa622007-08-15 14:28:22 +000030
31 *s* is the string to encode. Optional *altchars* must be a string of at least
32 length 2 (additional characters are ignored) which specifies an alternative
33 alphabet for the ``+`` and ``/`` characters. This allows an application to e.g.
34 generate URL or filesystem safe Base64 strings. The default is ``None``, for
35 which the standard Base64 alphabet is used.
36
Georg Brandl62e42312010-08-02 20:39:35 +000037 The encoded byte string is returned.
Georg Brandl116aa622007-08-15 14:28:22 +000038
39
R. David Murray64951362010-11-11 20:09:20 +000040.. function:: b64decode(s, altchars=None, validate=False)
Georg Brandl116aa622007-08-15 14:28:22 +000041
Georg Brandl62e42312010-08-02 20:39:35 +000042 Decode a Base64 encoded byte string.
Georg Brandl116aa622007-08-15 14:28:22 +000043
R. David Murray7cefc302010-10-17 23:12:16 +000044 *s* is the byte string to decode. Optional *altchars* must be a string of
45 at least length 2 (additional characters are ignored) which specifies the
46 alternative alphabet used instead of the ``+`` and ``/`` characters.
Georg Brandl116aa622007-08-15 14:28:22 +000047
R. David Murray64951362010-11-11 20:09:20 +000048 The decoded string is returned. A `binascii.Error` is raised if *s* is
49 incorrectly padded.
50
51 If *validate* is ``False`` (the default), non-base64-alphabet characters are
52 discarded prior to the padding check. If *validate* is ``True``,
53 non-base64-alphabet characters in the input result in a
54 :exc:`binascii.Error`.
Georg Brandl116aa622007-08-15 14:28:22 +000055
56
57.. function:: standard_b64encode(s)
58
Georg Brandl62e42312010-08-02 20:39:35 +000059 Encode byte string *s* using the standard Base64 alphabet.
Georg Brandl116aa622007-08-15 14:28:22 +000060
61
62.. function:: standard_b64decode(s)
63
Georg Brandl62e42312010-08-02 20:39:35 +000064 Decode byte string *s* using the standard Base64 alphabet.
Georg Brandl116aa622007-08-15 14:28:22 +000065
66
67.. function:: urlsafe_b64encode(s)
68
Georg Brandl62e42312010-08-02 20:39:35 +000069 Encode byte string *s* using a URL-safe alphabet, which substitutes ``-`` instead of
Benjamin Petersond75fcb42009-02-19 04:22:03 +000070 ``+`` and ``_`` instead of ``/`` in the standard Base64 alphabet. The result
71 can still contain ``=``.
Georg Brandl116aa622007-08-15 14:28:22 +000072
73
74.. function:: urlsafe_b64decode(s)
75
Georg Brandl62e42312010-08-02 20:39:35 +000076 Decode byte string *s* using a URL-safe alphabet, which substitutes ``-`` instead of
Georg Brandl116aa622007-08-15 14:28:22 +000077 ``+`` and ``_`` instead of ``/`` in the standard Base64 alphabet.
78
79
80.. function:: b32encode(s)
81
Georg Brandl62e42312010-08-02 20:39:35 +000082 Encode a byte string using Base32. *s* is the string to encode. The encoded string
Georg Brandl116aa622007-08-15 14:28:22 +000083 is returned.
84
85
Georg Brandlb868a662009-04-02 02:56:10 +000086.. function:: b32decode(s, casefold=False, map01=None)
Georg Brandl116aa622007-08-15 14:28:22 +000087
Georg Brandl62e42312010-08-02 20:39:35 +000088 Decode a Base32 encoded byte string.
Georg Brandl116aa622007-08-15 14:28:22 +000089
R. David Murray7cefc302010-10-17 23:12:16 +000090 *s* is the byte string to decode. Optional *casefold* is a flag specifying
91 whether a lowercase alphabet is acceptable as input. For security purposes,
92 the default is ``False``.
Georg Brandl116aa622007-08-15 14:28:22 +000093
94 :rfc:`3548` allows for optional mapping of the digit 0 (zero) to the letter O
95 (oh), and for optional mapping of the digit 1 (one) to either the letter I (eye)
96 or letter L (el). The optional argument *map01* when not ``None``, specifies
97 which letter the digit 1 should be mapped to (when *map01* is not ``None``, the
98 digit 0 is always mapped to the letter O). For security purposes the default is
99 ``None``, so that 0 and 1 are not allowed in the input.
100
Georg Brandl62e42312010-08-02 20:39:35 +0000101 The decoded byte string is returned. A :exc:`TypeError` is raised if *s* were
Georg Brandl116aa622007-08-15 14:28:22 +0000102 incorrectly padded or if there are non-alphabet characters present in the
103 string.
104
105
106.. function:: b16encode(s)
107
Georg Brandl62e42312010-08-02 20:39:35 +0000108 Encode a byte string using Base16.
Georg Brandl116aa622007-08-15 14:28:22 +0000109
Georg Brandl62e42312010-08-02 20:39:35 +0000110 *s* is the string to encode. The encoded byte string is returned.
Georg Brandl116aa622007-08-15 14:28:22 +0000111
112
Georg Brandlb868a662009-04-02 02:56:10 +0000113.. function:: b16decode(s, casefold=False)
Georg Brandl116aa622007-08-15 14:28:22 +0000114
Georg Brandl62e42312010-08-02 20:39:35 +0000115 Decode a Base16 encoded byte string.
Georg Brandl116aa622007-08-15 14:28:22 +0000116
117 *s* is the string to decode. Optional *casefold* is a flag specifying whether a
118 lowercase alphabet is acceptable as input. For security purposes, the default
119 is ``False``.
120
Georg Brandl62e42312010-08-02 20:39:35 +0000121 The decoded byte string is returned. A :exc:`TypeError` is raised if *s* were
Georg Brandl116aa622007-08-15 14:28:22 +0000122 incorrectly padded or if there are non-alphabet characters present in the
123 string.
124
Georg Brandl116aa622007-08-15 14:28:22 +0000125
Georg Brandlb54d8012009-06-04 09:11:51 +0000126The legacy interface:
Georg Brandl116aa622007-08-15 14:28:22 +0000127
128.. function:: decode(input, output)
129
Georg Brandlb54d8012009-06-04 09:11:51 +0000130 Decode the contents of the binary *input* file and write the resulting binary
Antoine Pitrou11cb9612010-09-15 11:11:28 +0000131 data to the *output* file. *input* and *output* must be :term:`file objects
132 <file object>`. *input* will be read until ``input.read()`` returns an empty
133 bytes object.
Georg Brandl116aa622007-08-15 14:28:22 +0000134
135
Georg Brandlb54d8012009-06-04 09:11:51 +0000136.. function:: decodebytes(s)
137 decodestring(s)
Georg Brandl116aa622007-08-15 14:28:22 +0000138
R. David Murray7cefc302010-10-17 23:12:16 +0000139 Decode the byte string *s*, which must contain one or more lines of base64
140 encoded data, and return a byte string containing the resulting binary data.
Georg Brandlb54d8012009-06-04 09:11:51 +0000141 ``decodestring`` is a deprecated alias.
Georg Brandl116aa622007-08-15 14:28:22 +0000142
143
144.. function:: encode(input, output)
145
Georg Brandlb54d8012009-06-04 09:11:51 +0000146 Encode the contents of the binary *input* file and write the resulting base64
Antoine Pitrou11cb9612010-09-15 11:11:28 +0000147 encoded data to the *output* file. *input* and *output* must be :term:`file
148 objects <file object>`. *input* will be read until ``input.read()`` returns
149 an empty bytes object. :func:`encode` returns the encoded data plus a trailing
150 newline character (``b'\n'``).
Georg Brandl116aa622007-08-15 14:28:22 +0000151
152
Georg Brandlb54d8012009-06-04 09:11:51 +0000153.. function:: encodebytes(s)
154 encodestring(s)
Georg Brandl116aa622007-08-15 14:28:22 +0000155
R. David Murray7cefc302010-10-17 23:12:16 +0000156 Encode the byte string *s*, which can contain arbitrary binary data, and
157 return a byte string containing one or more lines of base64-encoded data.
Georg Brandlb54d8012009-06-04 09:11:51 +0000158 :func:`encodebytes` returns a string containing one or more lines of
159 base64-encoded data always including an extra trailing newline (``b'\n'``).
160 ``encodestring`` is a deprecated alias.
161
Georg Brandl116aa622007-08-15 14:28:22 +0000162
Christian Heimesfe337bf2008-03-23 21:54:12 +0000163An example usage of the module:
Georg Brandl116aa622007-08-15 14:28:22 +0000164
165 >>> import base64
Georg Brandl134c35b2010-10-17 11:36:28 +0000166 >>> encoded = base64.b64encode(b'data to be encoded')
Georg Brandl116aa622007-08-15 14:28:22 +0000167 >>> encoded
Georg Brandl38d54f72009-01-18 10:43:58 +0000168 b'ZGF0YSB0byBiZSBlbmNvZGVk'
Georg Brandl116aa622007-08-15 14:28:22 +0000169 >>> data = base64.b64decode(encoded)
170 >>> data
Georg Brandl134c35b2010-10-17 11:36:28 +0000171 b'data to be encoded'
Georg Brandl116aa622007-08-15 14:28:22 +0000172
173
174.. seealso::
175
176 Module :mod:`binascii`
177 Support module containing ASCII-to-binary and binary-to-ASCII conversions.
178
179 :rfc:`1521` - MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies
180 Section 5.2, "Base64 Content-Transfer-Encoding," provides the definition of the
181 base64 encoding.
182