>>> import base64
>>> data = '{"u": "test"}'
>>> code = base64.b64encode(data)
>>> code
'eyJ1IjogInRlc3QifQ=='
Note the trailing ==
to make len a multiple of 4. This decodes properly
>>> len(code)
20
>>> base64.b64decode(code)
'{"u": "test"}'
>>> base64.b64decode(code) == data
True
without the == padding (this is how many things are encoded for e.g. access tokens)
>>> base64.b64decode(code[0:18]) == data
...
TypeError: Incorrect padding
However, you can add back the padding
>>> base64.b64decode(code + "==") == data
True
Or add an arbitrary amount of padding (it will ignore extraneous padding)
>>> base64.b64decode(code + "========") == data
True
This last property of python's base64 decoding ensures that the following code
adding 3 padding =
will never succumb to the TypeError and will always produce the same result.
>>> base64.b64decode(code + "===") == data
True
It's clumsy but effective method to deal with strings from different implementations of base64 encoders