我收到原始数据块,但没有关于序列化数据源的头信息。我唯一的信息是它的一个以下:序列化QtByteArray或Boost档案。有没有办法检查签名或类似的?
谢谢!
答案 0 :(得分:4)
TL; DR:否。
其他答案相当危险。如果不向描述所用序列化类型的序列化数据添加一些信息,则无法完成您想要做的事情。请记住,Qt和Boost的序列化都不是针对恶意数据流而设计的。
Qt的序列化`QByteArray'只是一个32位字节计数,后跟数据。没有类型信息或类似的东西。 boost存档包含更多信息,但是,绝对不能保证它会在一个随机的字节流中正常失败。例如,它可能会因耗尽内存而失败。
答案 1 :(得分:-1)
尝试使用一个然后另一个反序列化,并假设操作成功时它是有效数据。它不容易出错,但您可以假设某些原始数据对两者都有效的概率很小。即使在这种情况下,您也必须尝试按特定顺序反序列化。首先放置最可能的。