Data Encoding Tutorials - Herong's Tutorial Examples - v5.23, by Herong Yang
Python Built-In Implementation of Base64URL
This section provides a tutorial example on how to perform Base64URL encoding on binary files using the default Python implementation of the Base64URL encoding algorithm.
The Base64URL encoding algorithm bas been implemented in Python 3 language with two methods, base64.urlsafe_b64encode() and base64.urlsafe_b64encode().
However, the Python implementation of Base64URL does not remove "=" paddings. You may need to do it yourself.
Here is a sample program that allows you to perform Base64URL encoding/decoding and other variations.
# Base64_Tool.py
# Copyright (c) 2010 HerongYang.com. All Rights Reserved.
#
import sys
import base64
if (len(sys.argv)<5):
print("Usage:")
print("python Base64_Tool.py mode standard input output")
exit
mode = sys.argv[1]
standard = sys.argv[2]
inputFile = sys.argv[3]
outputFile = sys.argv[4]
inputStream = open(inputFile, "rb")
inputBytes = inputStream.read()
inputStream.close()
outputBytes = b""
if (mode=="decode"):
if (standard=="mime"):
outputBytes = base64.decodebytes(inputBytes)
elif (standard=="url"):
outputBytes = base64.urlsafe_b64decode(inputBytes)
else:
outputBytes = base64.b64decode(inputBytes)
else:
if (standard=="mime"):
outputBytes = base64.encodebytes(inputBytes)
elif (standard=="url"):
outputBytes = base64.urlsafe_b64encode(inputBytes)
else:
outputBytes = base64.b64encode(inputBytes)
print(outputBytes.decode(errors="replace"))
outputStream = open(outputFile, "wb")
outputStream.write(outputBytes)
outputStream.close()
Let's try it with different test cases:
herong$ python Base64_Tool.py encode url A.txt encoded.txt QQ== herong$ python Base64_Tool.py decode url encoded.txt decoded.txt A herong$ python Base64_Tool.py encode url lazy_dog.txt encoded.txt VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZy4= herong$ python Base64_Tool.py decode url encoded.txt decoded.txt The quick brown fox jumps over the lazy dog. herong$ python Base64_Tool.py encode url url.txt encoded.txt aS5odG0_NjQ-NjM= herong$ python Base64_Tool.py decode url encoded.txt decoded.txt i.htm?64>63 herong$ python Base64_Tool.py encode standard url.txt encoded.txt aS5odG0/NjQ+NjM= herong$ python Base64_Tool.py decode standard encoded.txt decoded.txt i.htm?64>63 herong$ python Base64_Tool.py encode url icon.png encoded.txt iVBORw0KGgoAAAANSUhEUgAAABgAAAAY ... HwXgCfzQYOFCEQYGAAAAAElFTkSuQmCC herong$ python Base64_Tool.py decode url encoded.txt decoded.txt ?PNG...
As you can see, Python implementation of Base64URL works as expected. The only issue is the "=" padding, which can be removed easily.
Table of Contents
Base64 Encoding and Decoding Tools
►Base64URL - URL Safe Base64 Encoding
Java Built-In Implementation of Base64URL
►Python Built-In Implementation of Base64URL
PHP Implementation of Base64URL Encoding
Perl Implementation of Base64URL Encoding