PythonMonkey icon indicating copy to clipboard operation
PythonMonkey copied to clipboard

fix: base64.py 'Incorrect padding' error

Open Ciarands opened this issue 1 year ago • 0 comments

Fix:

Update python implementation of 'atob' to properly reflect behaviour of JS 'atob' by padding the base64 with "==". https://stackoverflow.com/questions/2941995/python-ignore-incorrect-padding-error-when-base64-decoding

Motivation:

This fixes a number of JavaScript implementations for different Cryptography logic which takes advantage of atobs behavior, much of this logic doesn't take into account the padding, however Python's base64 library does. Since padding is arbitrary we can append "==" to the string before decoding. aGVsbG8gd29ybGQ -> raises binascii.Error aGVsbG8gd29ybGQ= -> hello world aGVsbG8gd29ybGQ== -> hello world aGVsbG8gd29ybGQ=== -> hello world and so on...

Examples:

Python - decode "hello world" no padding

import base64
data = "aGVsbG8gd29ybGQ"
base64.standard_b64decode(data)

binascii.Error: Incorrect padding

JavaScript - decode "hello world" no padding

atob("aGVsbG8gd29ybGQ")

'hello world'

Python - decode "hello world" with padding

import base64
data = "aGVsbG8gd29ybGQ"
base64.standard_b64decode(data + "==")

b'hello world'

Ciarands avatar Aug 09 '24 02:08 Ciarands