0

给定两个加密哈希(例如使用 SHA1):

hash1 = sha1(data1)
hash2 = sha1(data2)

我想将这两个散列组合成一个“看起来像”另一个散列的值(例如,对于 SHA1,它是 160 位)。假设只有hash1hash2是已知的,并且data1data2是未知的。

选项 1:计算两个散列连接的散列:

hash3 = sha1(concat(hash1, hash2))

选项 2:计算两个哈希的 XOR:

hash3 = hash1 XOR hash2

哪个选项不太可能发生冲突?

4

1 回答 1

2

如果您担心哈希冲突,最好的办法是尽可能使用更好的哈希算法(例如 SHA-2 或 SHA-3)。

但是,要回答您的问题:给定两个值,如果您对它们进行异或运算,甚至在您进行散列之前您可能会看到冲突。例如,1110 XOR 1111 是 0001,0011 XOR 0011 也是 0001。另一方面,连接这些值不会引入预哈希冲突。所以我会连接。

于 2014-01-22T18:07:43.960 回答