假设我想计算数据结构的哈希值,使用类似MD5的哈希算法接受串行流,以进行等价检查。 (我想记录哈希值,然后在相同或等效的数据结构上重新计算哈希值,并检查哈希值以高概率判断等价。)
有没有标准方法可以做到这一点?
我可以看到有问题的问题是
答案 0 :(得分:3)
对于第一个问题,还要哈希字符串的长度。这将区分他们的哈希。
对于第二个,对键进行排序。
答案 1 :(得分:2)
执行此操作的“标准”方法是定义数据结构的序列化形式,并消化生成的字节流。
例如,TBSCertificate是包含主题名称,扩展名和其他信息的数据结构。它以确定的方式转换为八位字符串,并作为数字签名操作的一部分进行散列以生成证书。
答案 2 :(得分:1)
结构体还存在另一个问题,即数据成员在不同平台上的对齐。 如果您想要一个稳定且可移植的解决方案,您可以通过为数据结构实现“serialize”方法来解决这个问题,方法是序列化将产生字节流(或更常见的是输出到字节流)。 然后,您可以将哈希算法与序列化流一起使用。通过这种方式,您将能够通过显式转换数据来解决您提到的问题。作为其他附加功能,您可以将数据保存到硬盘或通过网络发送。
对于字符串,您可以实现最先长度的Pascal类型存储。
答案 3 :(得分:1)
这也让我想起曾经听过的一个问题...我不知道你使用的语言是什么,但是如果你也是在没有过滤它们的情况下散列C结构,那么要小心字段之间的空间编译器可能为了对齐原因而引入的。有时那些不会被归零。