所以我对放气压缩的痴迷让我无处可去,但我觉得我可以做得更好。
这是我到目前为止所理解的:
def lz77(uncompressed):
#find repeated characters and replace it with references
#output will be like this m0,0 a0,0 l0,0 3,1
return lz77 encoded data
def huffmanencode(lz_data):
#encode data
#put block type identifier and the beginning of every block
#Put huffman encoded data
#put end of block or new block identifier
现在假设原始未压缩输入是:
我被认为是这个社会的失败者,我内心陷入了邪恶,现在你是个噱头,你不是我想要成为的人。后面的毒品交易 小巷就像一场疯狂的捉迷藏游戏 吐司上平均强奸 糟糕的一天,我什至还没有开始骑我的窥视但进入成人 我的未来是黯淡的。
然后我们使用 7zip 或 Winrar 的正常或默认参数对其进行压缩。
然后我不知道整个未压缩的输入:
我被认为是这个社会的失败者,被邪恶所困 我
但是我需要使用我知道的部分来获取几个字节的原始压缩数据。
以下是我的假设,无论实际情况如何:
由于未压缩数据的部分位于最开始,所以我可以尝试反对放气压缩的第一步,即LZ77。 因此输出
LZ77(original uncompressed)
和 LZ77(known portion)
将共享最高有效位。
最难的部分(如果不是不可能的话)是霍夫曼编码输出,它在测试用例中总是不同的,但是如果我知道霍夫曼树的大致长度或使用的霍夫曼代码在解压缩时重建树,那么我可以暴力破解它,如果它更短大于4字节
结论:
由于 LZ77 的输出一开始是相同的,那么获得霍夫曼树的知识肯定会让我输出相同的最高有效位。
我一直在查看Pyflate试图理解压缩时使用的霍夫曼编码信息的提取,但不清楚或者我误解了代码。
是否可以仅使用原始输入数据的第一部分获得相同的最高有效位?
我的目标是利用这个:
MIME-Version: 1.0
Date: Sun, 18 Feb 2024 15:02:54 +0200
From:
并获取其中最重要的部分:
MIME-Version: 1.0
Date: Sun, 18 Feb 2024 15:02:54 +0200
From: Bluebird <[email protected]>
Subject: Your monthly statement is available
Thread-Topic: Your monthly statement is available
Message-ID: <[email protected]>
To: "[email protected]" <[email protected]
如果不可能,我将需要知道上述霍夫曼代码或树的大小。
没有。
两个不同的 header 将代表两个完全不同的代码。即使知道标头的长度并知道数据的文字和长度/距离 LZ77 表示,标头后面的这两个位也会不同,因为代码不同。