将两个ulong哈希组合成新的ulong哈希

时间:2012-12-10 19:24:30

标签: hash cryptography

我有两个字符串在单独的处理阶段中被分成多个字符串(使用Google的CityHash),现在必须将两个哈希值组合成一个新的哈希值,而不会显着增加哈希冲突的风险。

我知道XOR有一些问题(例如Value ^ 0 = Value),但鉴于两个输入值应该已经很好地分布,我怀疑我可以像哈利这样组合哈希

ulong hash = hash1 ^ hash2; // hash1 and hash2 are ulong hashes of strings

这种方法有什么问题,还是有更好的方法不会增加显着的计算开销?

2 个答案:

答案 0 :(得分:1)

boost库以相当简单的方式完成此任务。

您可能需要计算64位的黄金数。

计算将是:

ulong hash = hash1 ^ ( hash2 + 0x9e3779b9 + (hash1 << 6) + (hash1 >> 2);

我相信数字0x9e3779b9是2 ^ 32 / phi。披是黄金比例。无理数除法试图以确定的方式添加“随机性”。

答案 1 :(得分:1)

根据@ GregS的评论和我自己的进一步阅读,我相信我并没有通过使用简单的XOR来严重降低散列分布。

这种方法似乎最明智。