使用 sha256 哈希值压缩文本文件似乎效率太高

Mar*_*rco 3 compression zip

我有一个 ASCII 编码的文本文件,其中每一行都具有以下结构:

\n\n
XYplorer nn.nn.nnnn [yyyy-mm-dd hh.mm.ss] [S256 S256].zip\n         \xe2\x86\x91\xe2\x86\x91 \xe2\x86\x91\xe2\x86\x91 \xe2\x86\x91\xe2\x86\x91\xe2\x86\x91\xe2\x86\x91  \xe2\x86\x91\xe2\x86\x91\xe2\x86\x91\xe2\x86\x91 \xe2\x86\x91\xe2\x86\x91 \xe2\x86\x91\xe2\x86\x91 \xe2\x86\x91\xe2\x86\x91 \xe2\x86\x91\xe2\x86\x91 \xe2\x86\x91\xe2\x86\x91   \xe2\x86\x9164\xc3\x97 \xe2\x86\x9164\xc3\x97\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以一行有 177 个字符长,其中 27 个字符不变,另外 150 个字符不变,这两个哈希值组成了 128 个这样的字符。我还假设哈希值基本上是随机文本,因此难以压缩,所以

\n\n

27/177 = 15.3%固定文本

\n\n

22/177 = 12.4%改变文字

\n\n

128/177 = 72.3%随机文本

\n\n

然而,在 Windows 上以标准(右键单击)方式压缩此类文件(1854 行)时,我获得了 49% 的压缩率,这让我感到困惑,因为它似乎太高/高效了。

\n\n

你能向我解释一下随机部分是如何被压缩这么多的吗?

\n

小智 5

这里的关键要素是这是一个 ascii 编码的文件。

\n\n

因此,每个字符都使用 8 位进行编码。\n177 \xc3\x97 8 = 每行 1416 位。然而,177 个字符不计入行结尾,在 Windows 中,行结尾被编码为“\\r\\n”(回车、换行),因此每行将使用 179 个字符,每行提供 1432 位。

\n\n

您的 SHA256 每个都是 64 个十六进制数字。十六进制数字可以简单地压缩为仅使用 4 位 (2^4 = 16),即大小的一半。

\n\n

让我们来分解一下:

\n\n
    \n
  • (27+2)/179 = 16.2% 固定文本(假设无限可压缩)
  • \n
  • 22/179 = 12.3% 更改文本
  • \n
  • 128/179 = 71.5% 的文本可以使用 %50 大小进行编码。
  • \n
\n\n

单独使用该映射,我得到 128/2 + 22 = 86 字节或 688 位。

\n\n
    \n
  • 688/1432 = 原始大小的 48%。
  • \n
\n\n

这没有考虑到可以对变化的文本执行任何额外的压缩,看起来它们通常是 ascii 数字,它们遭受与 ascii 十六进制数字相同的打包损失。

\n\n

说实话,我很惊讶 Windows 压缩功能并没有做得更好。

\n