Hash 散列冲突H(x)=H(y)与x=y、 这是否也意味着随机z的H(x+;z)=H(y+;z)?

Hash 散列冲突H(x)=H(y)与x=y、 这是否也意味着随机z的H(x+;z)=H(y+;z)?,hash,append,collision,Hash,Append,Collision,假设H是某个散列函数(比如MD5或SHA256或其他什么),我对此散列有冲突:两个不同的数据块x和y,它们具有相同的散列 换句话说,x≠但H(x)=H(y) 现在,如果我连接一些随机数据z,H(x+z)是否与H(y+z)相同 其思想是:x和y是冲突可能意味着它们碰巧使H函数处于相同的状态(从而导致相同的散列)。从那时起,不管我们附加了什么其他数据,它们的散列值都将保持相等 我测试了上面的测试,它似乎在那里工作。但我不知道这在一般情况下是否正确?取决于has函数。由于散列函数不是(即:f(x)=f

假设H是某个散列函数(比如MD5或SHA256或其他什么),我对此散列有冲突:两个不同的数据块x和y,它们具有相同的散列

换句话说,x≠但H(x)=H(y)

现在,如果我连接一些随机数据z,H(x+z)是否与H(y+z)相同

其思想是:x和y是冲突可能意味着它们碰巧使H函数处于相同的状态(从而导致相同的散列)。从那时起,不管我们附加了什么其他数据,它们的散列值都将保持相等


我测试了上面的测试,它似乎在那里工作。但我不知道这在一般情况下是否正确?

取决于has函数。由于散列函数不是(即:
f(x)=f(y)
意味着
x=y
),因此并不意味着
f(x+z)
f(y+z)
将映射到同一项。考虑一个反例:

给定哈希函数

f(x) = (x * 3) + 1 mod 6
然后
f(2)=1
f(6)=1
。设
z=1
。然后:

f(2 + z) = 4 and f(6 + z) = 1
因此
f(2)=f(6)
但是
f(2+z)≠ f(6+z)

但是,如果哈希函数是同态的,则根据同态的定义:

f(p + q) = f(p) + f(q)
因此:

f(x + z) = f(x) + f(z) 
f(y + z) = f(y) + f(z)
但正如您最初所说的那样,从
f(x)=f(y)
开始:

f(x) + f(z) = f(y) + f(z)

所以它们的哈希值是一样的

这种特殊的技术称为a。哈希函数是否易受攻击显然取决于特定的哈希函数。基于的哈希函数(如MD5和SHA-1)易受攻击。SHA-3不易受攻击,也不易受攻击。

(请宽容,这是我的第一个答案:D) 不一定:

考虑以下数据(作为数字列表)

和散列函数:

H([a b c]) = a + b*c
H([a b c d]) = H([b c d]) + H([a b c]) 
然后,x和y发生碰撞:

H(x) = H([8 0 4]) = 8 + 0*4 = 8
H(y) = H([8 1 0]) = 8 + 1*0 = 8
但在附加数据时,哈希值不相等:

H(z + x) = H([5 8 0 4]) = H([5 0 8]) + H([8 0 4]) = 5 + 8 = 13
H(z + y) = H([5 8 1 0]) = H([5 8 1]) + H([8 1 0]) = 13 + 8 = 21

简短版本:取决于哈希函数。见[本问题][1][1]:
H(z + x) = H([5 8 0 4]) = H([5 0 8]) + H([8 0 4]) = 5 + 8 = 13
H(z + y) = H([5 8 1 0]) = H([5 8 1]) + H([8 1 0]) = 13 + 8 = 21