gpt4 book ai didi

c# - 无法解压缩 ZLIB/DEFLATE 数据

转载 作者:行者123 更新时间:2023-11-30 17:17:48 26 4
gpt4 key购买 nike

我正在尝试从网络捕获文件 (PCAP) 的压缩字节中提取数据。

其中一些数据包中的数据没有 ZLIB header (前 2 个字节,其中第一个字节的低 4 位始终为 8),因此当我尝试使用 ZlibStream 解压缩它时出现异常>。带有标题的数据似乎工作正常。

据我所知,ZLIB 只是 DEFLATE 上的页眉和页脚,我将这些没有标题的数据传递给 DeflateStream。这次 DeflateStream 没有抛出任何错误,它只是给出了错误的数据(但给出了正确的长度)...

这是一个示例数据。 C# 代码示例使用 DotNetZip:

byte[] test3 = new byte[] { 0x1a, 0x6d, 0xf, 0x8d, 0xb6, 0x87, 0x46, 0xdb, 0x43, 0xa3, 0xed, 0xa1, 0xd1, 
0xf6, 0xd0, 0x68, 0x7b, 0x68, 0xb4, 0x3d, 0x34, 0xda, 0x1e, 0xb2, 0x44, 0x3a, 0x39, 0x6f, 0x24,
0xae, 0x1f, 0x2, 0x0, 0x0, 0x0, 0xff, 0xff };


static void UncompressData(byte[] data)
{
if ((data[0] & 0x0F) != 0x08)
{
var uncompressed = DeflateStream.UncompressBuffer(data);
Console.WriteLine("Uncompressed Deflate data : {0} => {1} bytes", data.Length, uncompressed.Length);
}
else
{
var uncompressed = ZlibStream.UncompressBuffer(data);
Console.WriteLine("Uncompressed ZLIB data : {0} => {1} bytes", data.Length, uncompressed.Length);
}
}

我测试了 C# 的 System.IO.Compression.DeflateStreamIonic.Zlib.DeflateStream(来自 DotNetZip )和 Java 的 java.util。 zip.Inflater.都给出了类似的全是 0 的数组 ..

知道这里可能缺少什么吗? ZLIB/DEFLATE 是否有可能是有状态的并且解压需要来自所有先前数据包的数据?

谢谢。

最佳答案

是的,您需要整个"file",您不能孤立地压缩单个数据包。

根据 zlib 文档,可以从文件中的不同点开始压缩。但是,您需要完全控制拼图的压缩部分,因为您必须准确知道这些点的位置才能从那里开始放气。而且它们仍然(可能)不会打破“数据包”边界。

关于c# - 无法解压缩 ZLIB/DEFLATE 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6200395/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com