0

我正在努力解压来自 BizTalk Server 的 AS2 请求的 Zlib 压缩 Mime 主体。

事情是:

我收到的 HTTP 正文与预期的一样。我可以阅读 ASCII 编码的 Mime 标头:

"内容类型:application/pkcs7-mime;smime-type=compressed-data;name=smime.p7m\r\n内容-传输-编码:二进制\r\n\r\n"

以两个换行符结束,我期待之后的压缩体。但是当我使用 Ionic.Zlib ZlibStream.UncompressBuffer() 解压缩以下字节时,它会引发错误。

Zlib Header 可以通过例如十六进制编码字节“78da”来识别。当我从那里开始解压缩它时,它工作正常。

两个换行符结束 mime 标头和“78da”开始 zlib 压缩数据之间的字节是多少?

“3080060b2a864886f70d0109100109a0803080020100300f060b2a864886f70d01091003080500308006092a864886f70d010701a080248004820769”

下一个问题,如果我把所有字节都读到最后,最后一个字节是无法解压的。据我了解,zLib 数据应该以 adler32 校验和结尾,但是如何在不尝试解压缩的情况下识别压缩数据的结尾或长度。我在成功解压缩数据后看到一些尾随字节:“1f9b1f1fcbc51f0482000445a59371”那是什么?

谢谢你的想法!

4

1 回答 1

0

不解压就找不到压缩数据的结尾。您不需要保存解压缩的结果,但您至少需要解码所有压缩数据才能找到它自行终止的位置。

于 2021-05-26T18:25:13.563 回答