PAX(预分配扩展)是一种开放源代码压缩存档格式,由 Microsoft 开发,作为 ZIP、RAR 和 tar 等现有格式的现代替代品。它旨在解决限制并改进现代系统和设备上存档处理的压缩、性能、安全性和功能。
PAX 格式的关键区别特征包括使用现代算法增强压缩、高效随机访问存档中的文件、本机多线程支持、可扩展元数据、内置加密和完整性检查,以及鼓励广泛采用和互操作性的记录开放规范。
PAX 存档使用文件扩展名 .pax,并具有由头、中央目录、压缩数据块和页脚组成的多部分内部结构。这允许将存档内容、压缩参数和完整性哈希等关键信息与实际压缩文件数据分开存储。
PAX 头以 4 字节魔术数字(十六进制中的 50 41 58 00)开头,用于标识。然后它包含 PAX 版本、压缩方法、加密方法、哈希方法、块大小、并行压缩线程数和各种标志的字段。头以可扩展 XML 元数据结束,提供有关存档的详细信息。
在头之后是 PAX 中央目录。其中包含存档中每个压缩文件/文件夹的条目,存储完整路径、属性、大小、块偏移量和哈希。将此放在一个位置可以有效地列出存档内容并随机访问各个文件,而无需扫描压缩数据。
PAX 存档的主体是一系列压缩数据块。每个块都有一个小头,指示未压缩和压缩的大小,然后是一块使用配置算法压缩的文件数据。块的默认大小为 1 MB,但可以在存档头中调整此大小。
如果指定了加密方法,则压缩数据块将被加密。PAX 支持 AES-256 等现代加密方案。存档密码用于派生一个密钥,该密钥独立加密每个块,从而实现高效的随机访问。为了进行身份验证,PAX 使用安全的 KDF 对密码进行哈希处理。
对于压缩,PAX 支持各种针对快速解压缩进行优化的现代通用编解码器:LZMA、LZ4、Brotli、Zstandard 等。它还允许对特定文件类型进行预处理以进一步减小大小(例如,对 EXE/DLL 进行 Delta 编码,对 x86 代码进行 E8E9 编码)。编解码器和预处理器在管道中应用。
为了实现高效的多线程压缩,文件被分区为独立压缩的块,这些块可以由并行编解码器实例处理。PAX 压缩器自动扩展以使用所有可用的 CPU 内核。类似的分区允许并行解压缩以实现更快的提取。
PAX 通过存储原始数据和压缩数据的哈希来提供数据完整性 和篡改检测。存档带有头哈希以检测截断。中央目录也经过哈希处理,以防止篡改文件元数据。通过对每个块进行哈希处理来捕获压缩数据中的位腐烂。
在 PAX 存档的末尾是页脚。其中包含头字段的副本、中央目录的偏移量/大小以及整个存档的哈希。页脚大小固定,始终位于文件末尾,从而可以轻松定位和验证 PAX 存档。
与像 ZIP 一样重写整个存档相比,可以通过修改中央目录和附加更改的数据块来有效更新 PAX 存档。可以通过更新元数据并添加/删除相关块来插入、删除或替换整个文件。还可以快速追加存档。
为了减轻 zip-slip 漏洞,PAX 需要显式路径(没有 ../ 遍历)并防止在提取根目录之外写入。限制了启用拒绝服务的长 ZIP 元数据字段。通过限制压缩比和内存使用量来减轻压缩炸弹。
PAX 存档中的文件时间戳使用标准的 64 位格式,覆盖范围广泛的日期,精度为 1 秒。支持 POSIX 权限和 Windows ACL 的属性。PAX 可以存储 NTFS 备用数据流和资源分支。符号链接和硬链接也可以表示。
开源 PAX SDK 提供了简单的 API,用于以编程方式创建、提取、更新和验证 PAX 存档。它处理 PAX 格式的所有低级细节。SDK 以多种语言提供,包括 C、C++、C#、Java、Python、JavaScript、Go 和 Rust。
总之,PAX 存档格式建立在 ZIP 等经过验证的格式的基础上,同时引入了现代功能和优化 - 高效压缩、多线程、随机访问、安全性和开放规范。这使得 PAX 非常适合当今系统上的各种存档场景。
文件压缩是一种减少数据文件大小,以便有效存储或传输的过程。它通过识别并消除冗余数据使用各种算法来压缩数据,这通常能大幅减少数据的大小,同时又不会失去原始信息。
文件压缩主 要分为两种类型:无损和有损。无损压缩允许从压缩数据完美地重构原始数据,这对于每一位数据都很重要的文件(如文本或数据库文件)非常理想。常见的例子包括 ZIP 和 RAR 文件格式。另一方面,有损压缩通过消除不太重要的数据来更大幅度地减少文件大小,经常用于音频、视频和图像文件。JPEG 和 MP3 是某些数据损失不会大幅降低内容感知质量的例子。
文件压缩的好处多种多样。它节省设备和服务器的存储空间,降低成本并提高效率。它还加速了在网络上(包括互联网)的文件传输时间,对大文件尤其有价值。此外,压缩文件可以被组织在一个归档文件中,有助于组织和轻松传输多个文件。
然而,文件压缩确实有一些缺点。压缩和解压过程需要计算资源,可能会拖慢系统性能,尤其是对于大文件。此外,在有损压缩的情况下,一些原始数据在压缩过程中会丢失,结果的质量可能不适合所有的应用,特别是对高质量有要求的专业应用。
文件压缩是当今数字世界中的关键工具。它提高了效率,节省了存储空间,并减少了下载和上传时间。尽管如此,它在系统性能和质量降低的风险方面确实存在一些缺点。因此,明智的对待这些因素来选择特定数据需求的正确压缩技术是至关重要的。
文件压缩是一种减小文件或文件集大小的过程,通常用于节省存储空间或加速网络传输。