C# 用C语言解压字节数组#
我正在研究EBICS协议,我想读取XML文件中的数据,以便与另一个文件进行比较 我已成功使用C# 用C语言解压字节数组#,c#,gzip,unzip,C#,Gzip,Unzip,我正在研究EBICS协议,我想读取XML文件中的数据,以便与另一个文件进行比较 我已成功使用 Convert.FromBase64String(OrderData)
Convert.FromBase64String(OrderData)但是现在我有了一个字节数组
要阅读内容,我必须解压缩它。我尝试使用Gzip将其解压缩,如以下示例所示:
static byte[] Decompress(byte[] data)
{
using (var compressedStream = new MemoryStream(data))
using (var zipStream = new GZipStream(compressedStream, CompressionMode.Decompress))
using (var resultStream = new MemoryStream())
{
zipStream.CopyTo(resultStream);
return resultStream.ToArray();
}
}
但它不工作我有一个错误消息:
gzip头中的幻数不正确。确保您正在传递gzip流
现在我不知道如何解压,请帮帮我
谢谢 尝试使用。它可以处理各种压缩格式,并且在GPL许可下是免费的
正如其他人所指出的,我怀疑您有一个zip流,而不是gzip。如果在十六进制视图中检查前4个字节,ZIP文件总是以0x04034b50开头,而GZIP文件则以0x8b1f开头,我想我终于找到了它-像往常一样,问题不在于标题中的内容。幸运的是,我在你的帖子中注意到了EBICS这个词。因此,根据EBICS规范,首先对数据进行压缩,然后进行加密,最后进行base64编码。如您所见,在解码base64之后,您需要首先对数据进行解密,然后尝试解压缩
更新:如果不是这样,那么从EBICS规范第16章附录:ZIP引用的zlib/deflate格式的标准和参考中可以看出,因此,您所需要做的就是将GZipStream
替换为OP在另一个答案的注释中提供的前四个字节:0x78 0xda 0xe5 0x98
是zlib流的开始。它既不是gzip,也不是zip,而是zlib。您需要一个ZlibStream
,由于某些原因,Microsoft没有提供。那很好,因为
您应该使用,它提供了ZlibStream
,并且可以正常工作。您可以演示如何压缩数据吗?我没有压缩数据,我想读取压缩的数据。你确定你的OrderData
在编码到base64并写入XML文件之前已经用GZipStream
压缩过吗?它不是用GZipStream编码的,但在我的.NET框架中只有一个可用。那么它是如何编码的?它不是一个文件,只是字节数组列出前4个字节。将您的第一个数字120218229152217转换为十六进制将得到0x72A6275,我不熟悉。您的编辑也是一个不熟悉的序列。在HIA请求中,EBICS消息中的订单未加密