Как декодировать Base64 в файл ZIP
- Вставьте Base64 в поле Base64 или data URI или откройте текстовый файл с ним кнопкой Открыть файл .txt.
- В сводке видно число файлов и папок, распакованный размер и сколько сэкономило сжатие, комментарий архива, если он есть, а также используется ли ZIP64 и есть ли защищённые элементы.
- В таблице для каждого элемента указаны Размер, Сжато и дата в столбце Изменён, а также кнопки Открыть и Сохранить.
- Нажмите Скачать файл, чтобы сохранить сам архив.
В списке показывается до 500 элементов; для архивов побольше отдельная строка сообщает, сколько осталось за кадром. Ничего не распаковывается, пока вы не нажмёте кнопку, и всё происходит в браузере. Content Security Policy страницы запрещает сетевые запросы, кроме счётчика просмотров Cloudflare, поэтому загрузить архив на сервер нельзя.
Как открыть один файл из архива
Открыть распаковывает один элемент и показывает его под таблицей: картинки, PDF, аудио и видео, текст и JSON и даже ZIP внутри ZIP (до трёх уровней вложенности). Сохранить скачивает этот файл под его собственным именем, без пути к папке. Каждый извлечённый элемент сверяется с CRC-32, записанной в архиве, а при расхождении появляется сообщение «Контрольная сумма не совпадает: элемент повреждён.»
Список справляется с архивами, на которых спотыкаются обычные программы:
- Архивы ZIP64, которые нужны для файлов больше 4 GB или больше 65 535 элементов.
- Имена файлов в UTF-8, в DOS-кодировке 437, которой пользовались старые инструменты Windows, или с полем Unicode-пути Info-ZIP.
- Самораспаковывающиеся архивы и другие ZIP с лишними данными в начале.
- Обрезанные архивы. Если каталога в конце нет, инструмент восстанавливает элементы по заголовкам перед каждым файлом и сообщает об этом: «Центральный каталог отсутствует (похоже, данные обрезаны).» У элементов с обрезанными данными появится сообщение, что данных нет.
У классических меток времени ZIP нет часового пояса, поэтому в столбце Изменён стоит время, которое показывали часы на машине, где создали архив. Если у элемента есть ещё и Unix-метка времени в дополнительном поле, используется она и показывается в вашем местном времени.
Что можно извлечь
| Элемент | В списке | Открыть и Сохранить |
|---|---|---|
| Без сжатия (метод 0) | Да | Да |
| Deflate (метод 8) | Да | Да |
| Deflate64, BZIP2, LZMA, Zstandard, XZ, PPMd | Да, с методом в скобках | Нет: «Метод сжатия BZIP2 в браузере не поддерживается.» |
| Зашифрованные, ZipCrypto или AES | Да, с пометкой [защищён] | Нет: «Этот элемент защищён паролем: его можно увидеть в списке, но не извлечь.» |
| Папки | Да | Нет |
Архивы, созданные Windows, macOS и командой zip, используют Deflate. Остальные методы чаще всего приходят из 7-Zip или WinZip, когда кто-то выбрал их ради лучшего сжатия.
Защита от zip-бомб
Маленький сжатый файл может распаковаться в огромный. 100 MiB нулей сжимаются в Deflate примерно до 100 KB, а вложенные или специально собранные архивы идут гораздо дальше. Перед распаковкой элемента инструмент проверяет размер, заявленный в архиве, и отказывается распаковывать всё, что больше 64 MB, с сообщением «Распаковка остановлена на 64.0 MB: для браузера это слишком много (возможно, zip-бомба). Скачайте архив.» Во время распаковки он также останавливается на заявленном размере плюс 1 KB, так что элемент, который врёт о своём размере, не вырастет больше заявленного.
Строка сводки всё равно показывает заявленный общий размер, и это само по себе полезное предупреждение: архив в несколько сотен килобайт, который распаковывается в гигабайты, заслуживает подозрения ещё до того, как вы откроете его любой программой.
Точно ли это ZIP?
Файлы ZIP начинаются с PK и ещё двух байтов: в Base64 это UEsDB; пустой архив начинается с UEsFBg. Многие форматы на деле ZIP-архивы под другим именем, и инструмент говорит, какой именно: DOCX, XLSX, PPTX, EPUB, ODT, JAR, APK. Все они здесь открываются и распаковываются; для документов Office есть ещё и текстовое превью на страницах Base64 в Word и Base64 в Excel.
Другие форматы архивов к ZIP не относятся. Архивы gzip инструмент распаковывает, а 7-Zip и RAR нет:
| Base64 начинается с | Формат | Что происходит |
|---|---|---|
H4sI | gzip (.gz, .tar.gz) | Распаковывается и показывается, есть Скачать как .gz |
N3q8ryc | 7-Zip | «Не похоже на ZIP (определено: 7-Zip)» |
UmFyIRo | RAR | «Не похоже на ZIP (определено: RAR)» |
Для 7-Zip и RAR Расширение остаётся zip. Впишите туда 7z или rar перед скачиванием, иначе система попробует открыть файл как ZIP и не сможет.
Распаковать ZIP из Base64 на Python
zipfile читает прямо из декодированных байтов, так что сначала записывать что-то на диск не нужно:
import base64, io, zipfile
with open("archive.b64") as f:
data = base64.b64decode(f.read())
with zipfile.ZipFile(io.BytesIO(data)) as z:
for info in z.infolist():
print(f"{info.filename:20} {info.file_size:>8} method={info.compress_type}")
z.extract("docs/readme.txt", "out")
В столбце method те же числа, что и в таблице выше: 0 (без сжатия), 8 (Deflate), 12 (BZIP2), 14 (LZMA). Python извлекает все четыре. В командной строке содержимое покажет base64 -d archive.b64 > archive.zip && unzip -l archive.zip. Как собрать такую строку из файлов, описано на страницах ZIP в Base64 и Base64 в Python.
Вопросы и ответы
Как конвертировать Base64 в файл ZIP?
Вставьте строку в поле выше и нажмите Скачать файл, чтобы сохранить decoded.zip. Если нужен только один файл, нажмите Сохранить рядом с ним в списке.
Можно открыть здесь ZIP с паролем?
Элементы будут в списке с пометкой [защищён], но извлечь их в браузере нельзя. Скачайте архив и откройте его в 7-Zip, unzip или системном архиваторе, и он спросит пароль.
Почему для элемента написано, что метод сжатия не поддерживается?
Браузеры умеют распаковывать только Deflate, а им сжат почти любой ZIP. Элементы, сжатые BZIP2, LZMA, Deflate64, Zstandard или PPMd (обычно это 7-Zip или WinZip), попадают в список, но извлекать их придётся настольной программой или модулем zipfile в Python, который читает BZIP2 и LZMA.
Мой Base64 начинается с H4sI. Это ZIP?
Нет, это gzip. Инструмент сообщит, что это похоже на GZIP, распакует его и покажет содержимое; внутри .tar.gz лежит архив TAR. Скачать как .gz сохранит его с правильным расширением.