Функция base64.b64decode не работает должным образом, почему? - PullRequest
0 голосов
/ 08 мая 2019

Я декодирую эти две строки (см. Ниже), но test1 и test2 имеют одинаковый результат, это означает, что они одинаковы.Зачем?Похоже, что функция b64decode обрезает строку после "==".Что я делаю не так?

test1 = base64.b64decode("IBFIgACAAIAAAA==Iq0yAACAMgAwMA==NzEI9AFkZEsegA==IHEINzdLS0sAAA==") test2 = base64.b64decode("IBFIgACAAIAAAA==")

Ответы [ 2 ]

1 голос
/ 08 мая 2019

Может быть, полезно знать, почему это происходит и что означает "=" в этом случае, и использовать его в base64.

Ваше предположение, что функция base64decode обрезает строку за "==", находится в некоторомэто правильно, потому что base64decoder интерпретирует его как конец строки base64.

Важно знать, как работает символ "=" и что он больше похож на специальный символ в кодировке base64 и не имеет соответствующего символакоторый кодирует его.

Просто чтобы дать вам краткий обзор и не углубляться в эту тему:

Если функция base64encode получает строку в качестве входных данных для генерации строки в кодировке base64 Длина вводаСтрока должна делиться на 3. Если это не так, base64 автоматически добавляет символ заполнения "=" в конце строки, закодированной в base64, чтобы сообщить функции base64decoder, сколько байт потребовалось для заполнения входной строки до делимого на 3.Строка и то, что он может правильно расшифровать строку обратно в исходный Striн.:

Вы увидите символ "=" всегда в конце строки base64, если строка не кратна 3 и не кодирует какой-либо символ.

0 голосов
/ 08 мая 2019

Похоже, что вы объединяете несколько закодированных строк вместе. Это не так, как работает кодирование.

Добавьте строки вместе перед их кодированием.

Или, если вы пытаетесь декодировать несколько закодированных строк, зациклите их:

encoded_strings = ["IBFIgACAAIAAAA==","Iq0yAACAMgAwMA==","NzEI9AFkZEsegA==","IHEINzdLS0sAAA=="] 

for i in encoded_strings:
    print(base64.b64decode(i))
...