binascii.Error: Неверное заполнение Как декодировать конец с помощью / - PullRequest
0 голосов
/ 22 апреля 2020

Я получил строку, закодированную с base64, я использую python для ее декодирования, но декодирование не удалось, я обнаружил, что за строкой следует / заканчивается, я не знаю, как ее декодировать, у меня нет нашел ответ, кто может помочь мне

data = 'dXN1c19pZD0xMDg2P2RvY01kPTE3Mzc4JnR5cGU9bmV3/'

print(base64.urlsafe_b64decode(data))
print(base64.standard_b64decode(data))
print(base64.b64decode(data))

1 Ответ

0 голосов
/ 22 апреля 2020

data - это обычная строка в кодировке base64, содержащая только символы из набора base64 . Проблема действительно в конце /, потому что длина строки base64 должна делиться на 4 без остатка. Так что там должно быть дополнение на конце, если это необходимо для достижения этого. С / в конце data имеет длину 45 символов, что означает 44 символа base64, которые могут быть декодированы до 33 байтов, а затем последний символ, который кодирует только 6 бит.

Простое добавление заполнения не будет решите это, потому что вы можете добавить только два дополнительных символа (=), но вам нужно еще один для пропущенных двух битов.

Таким образом, вы можете обрезать его так:

lenmax = len(data) - len(data)%4   
print(base64.b64decode(data[0:lenmax]).decode())

или добавить что-то вроде 0==, чтобы заполнить его до 48 символов. Но тогда вы получите сообщение об ошибке в decode(), и я не дружу с выдумкой дополнительных данных.

Или попросите / проверьте код отправителя, чтобы выяснить, почему это так одиноко / в конце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...