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.ErroraGVsbG8gd29ybGQ= -> hello worldaGVsbG8gd29ybGQ== -> hello worldaGVsbG8gd29ybGQ=== -> 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 + "==")
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
atob
s 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
-> raisesbinascii.Error
aGVsbG8gd29ybGQ=
->hello world
aGVsbG8gd29ybGQ==
->hello world
aGVsbG8gd29ybGQ===
->hello world
and so on...Examples:
Python - decode "hello world" no padding
binascii.Error: Incorrect padding
JavaScript - decode "hello world" no padding
'hello world'
Python - decode "hello world" with padding
b'hello world'