У меня есть закодированная строка, которую мне удалось декодировать, не зная, как она была закодирована изначально.Вот как мне удалось декодировать:
original_str = "LONG_SNIP" # Is clearly a base64 string
decoded_str = base64.b64decode(original_str) # Becomes unreadable mess
decompressed_str = zlib.decompress(decoded_str, -15) # Plain text, success
Я хотел бы отметить, что аргумент zlib '-15' является обязательным (все работает между -8 и -15)
Однако, если я хочу закодировать обычную текстовую строку в точно такой же формат, чтобы вышеуказанный код также успешно расшифровал ее, я столкнулся с проблемами.
Я проверил документацию по zlib и попробовал zlib.compress,а также создание compressobj и попытки сжатия с ним, но безуспешно.
Кажется, что значение '-15' не может быть введено ни в одну функцию, чтобы отменить декомпрессию, которую я делал изначально.
Это то, что я тоже пробовал, но я получаю пустой вывод:
compress = zlib.compressobj( 1, zlib.DEFLATED, -15, zlib.DEF_MEM_LEVEL, 0 )
deflated = compress.compress(string_to_compress)
encoded = base64.b64encode(deflated)
print(encoded)
ВОПРОСЫ:
Что означает целочисленный параметр и почему все значения между -8 и -15 дают одинаковый точный результат?
И что еще более важно, как я могу отменить декомпрессию?
Ответы очень ценятся, спасибо!