通过网络跨不同平台比较boost :: typeindex类型hash_code()是否安全?

时间:2016-12-23 13:27:03

标签: c++ networking boost hash typeid

安全地说,在机器A中使用boost typeindex hash_code计算类型哈希,然后通过网络将此哈希发送到机器B,然后,在机器B中,使用此哈希来发现机器A的类型是"谈论"。

归结为,是boost :: typeindex :: hash_code交叉平台的结果? 我可以在Playstation 4中计算这个哈希值,然后在运行Linux的PC和运行Windows以及XBox的另一台PC上检查这个哈希值吗?

我很长一段时间以来一直在寻找这个答案,而且我并非100%确定这是有保障的。如果不能保证,我怎么能实现这样的东西呢?

谢谢!

1 个答案:

答案 0 :(得分:4)

  

是boost :: typeindex :: hash_code跨平台的结果吗?

绝对不是。

hash_code甚至不需要为程序的两个连续构建生成相同的值。永远不应该在正在运行的程序之外的任何地方存储或传播它。

  

我怎么能实现这样的事情?

您需要确定性“类型名称”的确定性散列。您需要提供自己的协议来生成“类型名称”(例如,生成字符串的静态方法),然后您需要使用众所周知的算法(例如SHA1)对该名称进行哈希处理。 / p>

在有人争辩之前......

任何反驳论点,无论措辞多么谨慎都是错误的。 boost :: hash基于库扩展技术报告n1836(您可以找到here

第6.3.3(2)节说:

  

operator()的返回值是未指定,除了相等的参数产生相同的结果。 operator()不会抛出异常