Извлечь файл PAXR
Перетащите и отпустите или нажмите для выбора
Конфиденциально и безопасно
Все происходит в вашем браузере. Ваши файлы никогда не попадают на наши серверы.
Молниеносно
Никаких загрузок, никаких ожиданий. Конвертируйте в тот момент, когда вы перетаскиваете файл.
Действительно бесплатно
Не требуется учетная запись. Никаких скрытых платежей. Никаких уловок с размером файла.
Что такое формат PAXR?
Сокращённый обмен портативными архивами
PAX (Pre-Allocate eXtension) — это формат сжатого архива с открытым исходным кодом, разработанный Microsoft как современная альтернатива существующим форматам, таким как ZIP, RAR и tar. Он был разработан для устранения ограничений и улучшения сжатия, производительности, безопасности и функциональности обработки архивов на современных системах и устройствах.
Ключевые отличительные особенности формата PAX включают улучшенное сжатие с использованием современных алгоритмов, эффективный произвольный доступ к файлам в архивах, встроенную поддержку многопоточности, расширяемые метаданные, встроенное шифрование и проверку целостности, а также документированную открытую спецификацию для поощрения широкого внедрения и взаимодействия.
Архивы PAX используют расширение файла .pax и имеют многокомпонентную внутреннюю структуру, состоящую из заголовка, центрального каталога, сжатых блоков данных и нижнего колонтитула. Это позволяет хранить ключевую информацию, такую как содержимое архива, параметры сжатия и хэши целостности, отдельно от фактических сжатых данных файла.
Заголовок PAX начинается с 4-байтового магического числа (50 41 58 00 в шестнадцатеричном формате) для идентификации. Затем он содержит поля для версии PAX, метода сжатия, метода шифрования, метода хэширования, размера блока, количества параллельных потоков сжатия и различных флагов. Заголовок заканчивается расширяемыми метаданными XML, содержащими подробную информацию об архиве.
За заголовком следует центральный каталог PAX. Он содержит запись для каждого сжатого файла/папки в архиве, храня полный путь, атрибуты, размеры, смещения блоков и хэши. Наличие этого в одном месте позволяет эффективно перечислять содержимое архива и осуществлять произвольный доступ к отдельным файлам без сканирования сжатых данных.
Основная часть архива PAX представляет собой серию сжатых блоков данных. Каждый блок имеет небольшой заголовок, указывающий несжатый и сжатый размер, за которым следует фрагмент данных файла, сжатый с помощью настроенного алгоритма. По умолчанию размер блоков составляет 1 МБ, но это можно настроить в заголовке архива.
Сжатые блоки данных по желанию шифруются, если указан метод шифрования. PAX поддерживает современные схемы шифрования, такие как AES-256. Пароль архива используется для получения ключа, который шифрует каждый блок независимо, что обеспечивает эффективный произвольный доступ. Для аутентификации PAX хэширует пароли с помощью защищенного KDF.
Для сжатия PAX поддерживает множество современных универсальных кодеков, оптимизированных для быстрой декомпрессии: LZMA, LZ4, Brotli, Zstandard и т. д. Он также допускает использование препроцессоров для дальнейшего уменьшения размера для определенных типов файлов (например, кодирование Delta для EXE/DLL, кодирование E8E9 для кода x86). Кодеки и препроцессоры применяются в конвейере.
Чтобы обеспечить эффективное многопоточное сжатие, файлы разделяются на независимо сжатые блоки, которые могут обрабатываться параллельными экземплярами кодека. Компрессор PAX автоматически масштабируется для использования всех доступных ядер ЦП. Подобное разделение позволяет осуществлять параллельную декомпрессию для более быстрой распаковки.
PAX обе спечивает целостность данных и обнаружение несанкционированного доступа путем хранения хэшей исходных и сжатых данных. Архивы содержат хэш заголовка для обнаружения усечения. Центральный каталог также хэшируется, чтобы предотвратить несанкционированный доступ к метаданным файла. Повреждение битов в сжатых данных обнаруживается путем хэширования каждого блока.
В конце архива PAX находится нижний колонтитул. Он содержит копию полей заголовка, смещение/размер центрального каталога и хэш всего архива. Нижний колонтитул имеет фиксированный размер и всегда находится в конце файла, что позволяет легко находить и проверять архивы PAX.
Архивы PAX можно эффективно обновлять, изменяя центральный каталог и добавляя измененные блоки данных, вместо того чтобы переписывать целые архивы, как в ZIP. Целые файлы можно вставлять, удалять или заменять, обновляя метаданные и добавляя/удаляя соответствующие блоки. Архивы также можно быстро добавлять.
Чтобы смягчить уязвимости zip-slip, PAX требует явных путей (без перехода ../) и предотвращает запись за пределами корня извлечения. Длинные поля метаданных ZIP, которые допускали отказ в обслуживании, ограничены. Бомбы сжатия смягчаются за счет ограничений коэффициента сжатия и использования памяти.
Временные метки файлов в архивах PAX используют стандартный 64-битный формат, охватывающий широкий диапазон дат с точностью до 1 секунды. Поддерживаются атрибуты для разрешений POSIX и списков управления доступом Windows. PAX может хранить альтернативные потоки данных NTFS и разветвления ресурсов. Символьные и жесткие ссылки также могут быть представлены.
Пакет SDK PAX с открытым исходным кодом предоставляет простые API для создания, извлечения, обновления и проверки архивов PAX программным способом. Он обрабатывает все низкоуровневые детали формата PAX. Пакет SDK доступен на нескольких языках, включая C, C++, C#, Java, Python, JavaScript, Go и Rust.
Подводя итог, формат архива PAX опирается на основу проверенных форматов, таких как ZIP, при этом вводя современные функции и оптимизации — эффективное сжатие, многопоточность, произвольный доступ, безопасность и открытую спецификацию. Это делает PAX идеальным для широкого спектра сценариев архивирования в современных системах.
Сжатие файлов уменьшает избыточность, чтобы те же данные занимали меньше бит. Верхняя граница задаётся теорией информации: для без потерь пределом является энтропия источника (см. теорему кодирования источника Шеннона source coding theorem и его оригинальную статью 1948 года «A Mathematical Theory of Communication»). Для сжатия с потерями компромисс между битрейтом и качеством описывает теория rate–distortion.
Два столпа: моделирование и кодирование
Большинство компрессоров работают в два этапа. Сначала модель предсказывает или выявляет структуру данных. Затем кодер превращает эти предсказания в почти оптимальные шаблоны битов. Классическая семья моделей — Lempel–Ziv LZ77 (1977) и LZ78 (1978) находят повторяющиеся подстроки и излучают ссылки вместо сырых байтов. На стороне кодирования кодирование Хаффмана (см. статью 1952 года) назначает более короткие коды вероятным символам. Арифметическое кодирование и range coding ещё точнее приближаются к пределу энтропии, а современные Asymmetric Numeral Systems (ANS) дают схожие коэффициенты при табличных реализациях.
Что делают популярные форматы
DEFLATE (используют gzip, zlib, ZIP) сочетает LZ77 и Хаффмана. Спецификации открыты: DEFLATE RFC 1951, оболочка zlib RFC 1950и формат gzip RFC 1952. Gzip ориентирован на потоковую передачу и явно не обеспечивает произвольный доступ. PNG закрепляет DEFLATE как единственный мето д (окно до 32 КиБ) согласно спецификации «Compression method 0…» и W3C/ISO PNG 2nd Edition.
Zstandard (zstd): современный универсальный компрессор с высокими коэффициентами и очень быстрой декомпрессией. Формат описан в RFC 8878 (и HTML-зеркале) и в референс-спеке на GitHub. Как и gzip, базовый фрейм не предполагает произвольного доступа. Главное преимущество zstd — словари: маленькие образцы корпуса, резко улучшающие сжатие множества крошечных или похожих файлов (см.документацию словарей python-zstandard и пример Nigela Tao). Реализации принимают «unstructured» и «structured» словари (обсуждение).
Brotli: оптимизирован для веб-контента (WOFF2, HTTP). Совмещает статический словарь и DEFLATE-подобное ядро LZ+энтропия. Спецификация — RFC 7932, где указано окно 2WBITS−16 с WBITS в [10, 24] и то, что формат не предоставляет произвольный доступ. Brotli часто превосходит gzip на веб-тексте и быстро декодируется.
Контейнер ZIP: ZIP — файловый архив, поддерживающий разные методы (deflate, store, zstd и др.). Де-факто стандарт — APPNOTE PKWARE (см.портал APPNOTE, размещённую копиюи обзоры LC ZIP File Format (PKWARE) / ZIP 6.3.3).
Скорость vs коэффициент
LZ4 ориентирован на максимальную скорость при умеренных коэффициентах. См. страницу проекта и формат фреймов. Подходит для кэшей в памяти, телеметрии и горячих путей, где декомпрессия должна быть почти со скоростью RAM.
XZ / LZMA гнётся за плотностью (высоким коэффициентом), но компрессует медленнее. XZ — контейнер; основную работу делают LZMA/LZMA2 (моделирование наподобие LZ77 + range coding). См.формат .xz, спецификацию LZMA (Павлов)и заметки ядра Linux про XZ Embedded. XZ обычно сжимает лучше gzip и соперничает с современными кодеками высокой плотности, но кодирует дольше.
bzip2 использует преобразование Бэрроуза–Уилера (BWT), move-to-front, RLE и Хаффмана. Обычно даёт файлы меньше, чем gzip, но медленнее; см.официальный мануал и man-страницу (Linux).