In Part 1 of this series, you’ll take the string you previously encoded and decode it in Python.
Recall that you encoded
/Users/data/mystuff and received
Then, you stripped the
== characters at the end so that you could pass it around in URLs. You’re now left with
Can you decode this directly in Python? Try it now:
from base64 import urlsafe_b64decode urlsafe_b64decode('L1VzZXJzL2RhdGEvbXlzdHVmZg'.encode('utf-8-)) >>> binascii.Error: Incorrect padding
Oops, Incorrect padding.
In Base64, the
= sign is used for padding. The encoder will check if the resulting string is divisible by 4, if it’s not, it will add enough
= signs for this to happen.
All we have to do is reconstruct the original padding:
s = 'L1VzZXJzL2RhdGEvbXlzdHVmZg' pads_missing = len(s) % 4 if pads_missing > 0: s = s + (4 - pads_missing) urlsafe_b64decode(s.encode(‘utf-8’))
You'll now end up with the origin
Awesome, now you know how to send weird looking data that unsafe to be embedded in URLs.