Ошибка декодирования неправильного заполнения с decode64, с заполнением присутствует? - PullRequest
0 голосов
/ 20 ноября 2018

С кодом, который я использую, каждый раз, когда в данных закодированного сообщения появляется "? ", я получаю сообщение об ошибке "Incorrect Padding". При использовании декодера в режиме онлайн я получаю правильное значение для обоих value1и value2 ниже, но для value2, где должно быть "?", вместо этого я получаю исключение.

Код:

value1 = "Y29udGludWENCg=="
expected1 = b'continua\r\n'
value2 = "Y29udGludWE_DQo="
expected2 = b'continua?\r\n'

data1 = base64.b64decode(value1)
assert data1 == expected1
data2 = base64.b64decode(value2)
assert data2 == expected2

Декодирование value2 бросаетbinascii.Error: Incorrect padding исключение, но данные имеют правильное количество отступов (длина value2 кратна 4).

1 Ответ

0 голосов
/ 20 ноября 2018

У вас нет стандартных данных Base64, у вас есть URL-безопасные данные base64.

Base64 обычно использует буквы, цифры и символы / и +, но последниедва имеют особое значение в URL, поэтому используется альтернативная кодировка Base64url , в которой вместо нее используются символы - и _.

Используйте функцию base64.urlsafe_b64decode() для декодирования этих строк:

data2 = base64.urlsafe_b64decode(value2)

Демо:

>>> import base64
>>> value2 = "Y29udGludWE_DQo="
>>> base64.urlsafe_b64decode(value2)
b'continua?\r\n'
...