C++ - Zlib - Header 和无 Header 支持。有多可靠?
C++ - Zlib - Header and No Header support. How reliable?
我目前正在开展一个大型项目,可能 compress/decompress 在 C++ 中使用 zlib,每天处理数千个文档。 (我们的实现有 zlib 1.2.8)
我们当前的实现支持带和不带 header 的压缩文件,但是必须设置布尔值 "useZlibHeader"。
我们的团队想知道是否有一种 100% 可靠的方法来确定 header 是否存在。
根据此文档:https://www.ietf.org/rfc/rfc1950.txt 据说“FCHECK 值必须满足 CMF 和 FLG,当被视为以 MSB 顺序存储的 16 位无符号整数时 (CMF*256 + FLG) , 是 31 的倍数。"
确实这是一个很好的检查,但有可能我们最终得到一个没有 header 的压缩文件,但它的数据是 (CMF*256 + FLG) 的倍数共 31
是否有更好的方法来检测 header 是否存在?有没有可能我们检测不到header的存在,解压不抛出异常,输出坏数据?
谢谢
作为启发式检查,它将不可靠且容易被利用。我可以设想生成一个压缩为 zlib header 的文档。如果 header 被视为有效,这也会产生有效的解压缩流。
实际上,对传输数据的限制可能会减轻,但它可能仍然很危险
我目前正在开展一个大型项目,可能 compress/decompress 在 C++ 中使用 zlib,每天处理数千个文档。 (我们的实现有 zlib 1.2.8)
我们当前的实现支持带和不带 header 的压缩文件,但是必须设置布尔值 "useZlibHeader"。
我们的团队想知道是否有一种 100% 可靠的方法来确定 header 是否存在。
根据此文档:https://www.ietf.org/rfc/rfc1950.txt 据说“FCHECK 值必须满足 CMF 和 FLG,当被视为以 MSB 顺序存储的 16 位无符号整数时 (CMF*256 + FLG) , 是 31 的倍数。"
确实这是一个很好的检查,但有可能我们最终得到一个没有 header 的压缩文件,但它的数据是 (CMF*256 + FLG) 的倍数共 31
是否有更好的方法来检测 header 是否存在?有没有可能我们检测不到header的存在,解压不抛出异常,输出坏数据?
谢谢
作为启发式检查,它将不可靠且容易被利用。我可以设想生成一个压缩为 zlib header 的文档。如果 header 被视为有效,这也会产生有效的解压缩流。
实际上,对传输数据的限制可能会减轻,但它可能仍然很危险