在哈希中发现碰撞

时间:2016-05-15 16:03:12

标签: c# .net hash

因此,对于某项任务,我被要求在2个随机64字节序列之间找到SHA256摘要的前n位(n将为4,8 ...)的冲突,我这样做

SHA256Managed hashstring = new SHA256Managed();
byte[] hash_1 = hashstring.ComputeHash(a);
...

我计算哈希值的字符串值。

string hashString = string.Empty;
foreach (byte x in hash)
{
    hashString += String.Format("{0:x2}", x);
}
return hashString;

我使用字符串匹配函数首先提取,比如前8位:

string first8Char_hash1 = new string(hashDisplay(hash_1).Take(8).ToArray());

检查第一个是否,8位是否匹配,即

if (first8Char_hash1.Equals(first8Char_hash2))
{
    //Do something
}

现在,如果我这样做,比如说前4位,我发现在平均12,000次迭代中发生了碰撞,但是,对于前8位,我甚至在1,00,00次尝试后也找不到碰撞

有什么问题? 感谢。

1 个答案:

答案 0 :(得分:2)

当您将数字打印为十六进制时,每4位变为一个十六进制字符。如果您想在前4位中找到冲突,则比较一个字符,而不是四个字符。四个字符对应于16位冲突。

对于8位,比较十六进制字符串的前两个字符。