Base64 shenanigans in Python
Published
Updated
TypeError: a bytes-like object is required, not 'str'
This error occurs when you try to base64 encode or decode a string instead of an appropriate bytes-like object. This is a common issue and originates from when Python changed some of its string mechanics from version 2 to 3. To solve this, make sure you are handling the casting correctly, summarized below.
Encoding a String using Base64 in Python
You can base64 encode a string in Python by first converting it into its appropriate bytes and then using the b64encode
method:
import base64
# This is the string you want to encode to base64
my_string = 'Hello World'
# First, encode the string into its respective bytes using the encode method.
# This can be set as ascii, uti-8, utf-16, utf-32
my_bytes = my_string.encode('utf-8')
# Next, use the base64 encode method to encode the bytes to base64
base64_bytes = base64.b64encode(my_bytes)
# Finally, you can convert the bytes to a string again if needed:
base64_string = str(base64_bytes)
print(base64_string)
You can also take this a step further and eliminate the need to encode the string to bytes by prepending the string with a byte indicator like so:
my_bytes = b'Hello World'
base64_string = str(base64.b64encode(my_bytes))
print(base64_string)
Decoding a String using Base64 in Python
Decoding a base64 string works similar to encoding. Just be sure not to mix up strings with byte strings!
import base64
# This is the string you want to decode
my_string = 'SGVsbG8gV29ybGQ='
# First, transform the string into its respective bytes
my_bytes = my_string.encode('utf-8')
# Next, use the base64 decode method to decode the bytes to base64
base64_bytes = base64.b64decode(my_bytes)
# Finally, you can convert the bytes to a string again if needed:
decoded_string = str(base64_bytes)
print(decoded_string)