给定两个加密哈希值(例如使用SHA1):
hash1 = sha1(data1)
hash2 = sha1(data2)
我想将两个哈希值组合成一个“看起来像”另一个哈希的值(例如,对于SHA1,它是160位)。假设只知道hash1
和hash2
,data1
和data2
未知。
选项1:计算两个哈希串联的哈希值:
hash3 = sha1(concat(hash1, hash2))
选项2:计算两个哈希的XOR:
hash3 = hash1 XOR hash2
哪个选项不太可能发生碰撞?
答案 0 :(得分:2)
如果您担心哈希冲突,最好的办法是尽可能使用更好的哈希算法(例如SHA-2或SHA-3)。
但是,要回答你的问题:给定两个值,如果你对它们进行异或,你甚至可以在进行散列之前看到碰撞。例如,1110 XOR 1111是0001,而0011 XOR 0011也是0001.另一方面,连接这些值不能引入预散列冲突。所以我会连接。