Python: игнорировать ошибку «Неверное заполнение» при декодировании base64 - PullRequest
83 голосов
/ 31 мая 2010

У меня есть некоторые данные в кодировке base64, которые я хочу преобразовать обратно в двоичный файл, даже если в нем есть ошибка заполнения. Если я использую

base64.decodestring(b64_string)

возникает ошибка «Неверное заполнение». Есть ли другой способ?

ОБНОВЛЕНИЕ: Спасибо за все отзывы. Если честно, все упомянутые методы звучали немного хитом и пропустить, поэтому я решил попробовать openssl. Следующая команда обработала удовольствие:

openssl enc -d -base64 -in b64string -out binary_data

Ответы [ 13 ]

0 голосов
/ 23 января 2018

В моем случае я столкнулся с этой ошибкой при разборе электронной почты. Я получил вложение в виде строки base64 и извлек его через re.search. В конце концов в конце появилась странная дополнительная подстрока.

dHJhaWxlcgo8PCAvU2l6ZSAxNSAvUm9vdCAxIDAgUiAvSW5mbyAyIDAgUgovSUQgWyhcMDAyXDMz
MHtPcFwyNTZbezU/VzheXDM0MXFcMzExKShcMDAyXDMzMHtPcFwyNTZbezU/VzheXDM0MXFcMzEx
KV0KPj4Kc3RhcnR4cmVmCjY3MDEKJSVFT0YK

--_=ic0008m4wtZ4TqBFd+sXC8--

Когда я удалил --_=ic0008m4wtZ4TqBFd+sXC8-- и удалил строку, анализ был исправлен.

Поэтому я советую убедиться, что вы декодируете правильную строку base64.

0 голосов
/ 06 января 2018

В случае, если эта ошибка произошла с веб-сервера: попробуйте URL, кодирующий значение вашего сообщения. Я выполнял POSTing через «curl» и обнаружил, что мое значение base64 не кодирует url, поэтому такие символы, как «+», не экранируются, поэтому логика url-decode веб-сервера автоматически запускает url-decode и преобразует + в пробелы.

"+" является допустимым символом base64 и, возможно, единственным символом, который искажается неожиданным url-декодированием.

0 голосов
/ 08 ноября 2014

Просто добавьте дополнительные символы, такие как "=" или любой другой, и сделайте его кратным 4, прежде чем пытаться декодировать значение целевой строки. Что-то вроде;

if len(value) % 4 != 0: #check if multiple of 4
    while len(value) % 4 != 0:
        value = value + "="
    req_str = base64.b64decode(value)
else:
    req_str = base64.b64decode(value)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...