因此,对于某个任务,我被要求在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位,我觉得中说碰撞的平均12000次迭代,但是,对于第8位,以及我无法连1之后找到了碰撞, 00,00尝试。
有什么问题? 谢谢。
您正在通过将字节转换为可迭代来比较字节,然后将其转换为数组,然后将其转换为字符串;你能想出一个更好的方法来比较字节的平等吗? –
“直到程序崩溃”出现什么错误? 'OutOfMemoryException'?另外,我不会使用LINQ并调用'Take(8)',然后调用'string.Equals()',但只要使用标准的'for'循环,并且只要一个位不匹配。 –
你已经混淆了字节的位。字节是八位。 –