有序列表的组合哈希

3
假设我有一个包含 n 个某种类型(例如长度可变的二进制数据文件)对象(x1、x2、...,xn)的有序列表。
每个对象都被安全哈希(例如 SHA1)以生成一个 m 位哈希码(h1、h2、...,hn)。
现在,我希望将这些哈希码组合成一个复合码,以唯一且安全地(忽略可忽略的碰撞概率)识别有序列表。
(假设对象很大,无法再次读取它们的实际数据)
一种天真和不正确的方法是将哈希码进行XOR运算。这样做的不良后果是(x1、x2)与(x2、x1)将具有相同的复合码。
有没有哪种算法可以将哈希码组合起来以满足所需的属性呢?

2
嗯...有趣!你能否只使用初始哈希函数对它们的哈希串联进行哈希处理? - templatetypedef
2个回答

2
为了保持一致性和安全性,我会将列表项的个体哈希值通过将个体 SHA-1 哈希连接起来并应用 SHA-1 进行合并。

1

你可以尝试使用与Java中列表哈希相同的算法,这是一个32位哈希码的示例

int hashCode = 0;
for(Element e:list) {
   hashCode = 31*hashCode + (e==null ? 0 : e.hashCode());
}

对于多层,您可以使用另一个质数。我希望您能理解这个算法的主要思想,并将其应用于任意m位哈希码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接