快速(实际上)无冲突哈希

时间:2014-11-04 09:15:55

标签: performance security hash hash-collision

我有一个计算(长)路径的对象。如果计算相同的路径,则两个对象相等。我之前测试过两个对象是否相等只是做了类似的事情:

obj1.calculatePath() == obj2.calculatePath()

然而,现在这已成为性能瓶颈。我尝试将路径存储在对象中,但由于我有很多对象,所以这变成了内存问题。

我估计64位散列应足以避免冲突 - 假设散列是好的(双射)。

所以,由于通常的快速哈希(Murmur等)确实有冲突,我想避免它们,因为当你可以使用像SHA-2这样的哈希时听起来很头疼。 (如果我可以信任哈希而不是在两个对象的哈希匹配的情况下进行额外的检查,那就更好了)

然而,与旧的哈希函数(如MD系列)相比,SHA也“慢”我想知道使用像MD5甚至MD4这样的东西会更好。

所以我的问题是:假设没有邪恶的黑客有动机与特制输入产生碰撞 - 但只有良性(随机)输入。我应该为代码的性能关键部分选择哪个哈希函数,我希望避免使用像Murmur这样的“不安全”哈希的复杂性。

1 个答案:

答案 0 :(得分:0)

没有更多信息,很难提供帮助。 所有人都可以推荐的是通用哈希函数。 有一个元素可以提供一些去!

FNV-1a(http://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function

通常是一个不太破旧的起点。 它(a)易于实现,(b)通常不“坏”,(c)计算成本低廉,适用于“长期”路径问题。

但我想知道的是:

这些路径有哪些空间? in(x,y,z,t)'真实'时空(即轨迹)?通过一些图表的路径?他们是文件路径吗?还有别的吗?

如果没有更多的背景,很难说更多。