Удалять знаки равенства хорошо, если вы знаете, что они делают.
Base64 выводит 4 символа на каждые 3 байта, которые он кодирует (другими словами, каждый символ кодирует 6 бит).Символы заполнения добавляются таким образом, что любая строка base64 всегда кратна длине 4, а символы заполнения фактически не кодируют никаких данных.(Я не могу сказать наверняка , почему это было сделано - как способ проверки ошибок, была ли строка обрезана, чтобы облегчить декодирование, или что-то еще?).
В любом случае это означает, что если у вас есть x
base64 символов (без заполнения), будет 4-(x%4)
символов заполнения.(Хотя x%4=1
никогда не произойдет из-за факторизации 6 и 8).Поскольку они не содержат фактических данных и могут быть восстановлены, я часто удаляю их, когда хочу сэкономить место, например: ::
from base64 import b64encode, b64decode
# encode data
raw = b'\x00\x01'
enc = b64encode(raw).rstrip("=")
# func to restore padding
def repad(data):
return data + "=" * (-len(data)%4)
raw = b64decode(repad(enc))