C++ 简化SHA1散列的部分冲突

C++ 简化SHA1散列的部分冲突,c++,birthday-paradox,C++,Birthday Paradox,我正在做一个项目,以找到两个不同的句子,使部分冲突的基础上减少sha1散列。我的程序将生成两条不同的消息。如果两个句子的前32位哈希匹配,程序将停止,否则将重复,直到检测到冲突 我的程序运行良好,但是搜索碰撞所需的时间会变慢。我怎样才能加快速度呢。我读了之后发现我可以使用生日悖论,我该如何实现它 我做了一些搜索,得到了相关的答案,但我仍然对生日悖论感到困惑 这就是我的程序的工作原理: Generate random number() // let say i generate 100 n

我正在做一个项目,以找到两个不同的句子,使部分冲突的基础上减少sha1散列。我的程序将生成两条不同的消息。如果两个句子的前32位哈希匹配,程序将停止,否则将重复,直到检测到冲突

我的程序运行良好,但是搜索碰撞所需的时间会变慢。我怎样才能加快速度呢。我读了之后发现我可以使用生日悖论,我该如何实现它

我做了一些搜索,得到了相关的答案,但我仍然对生日悖论感到困惑

这就是我的程序的工作原理:

Generate random number() // let say i generate 100 number
Generate random char1() // we will generate 100 char
Hash() // the first 100 char  
Generate random char2() // we will generate another 100 char
Hash2() // this 100 char again
Get the 32 bit of the random char1()
Get the 32 bit of the random char2()
compare the 32 bit for partial collision 
If they dont match we will keep on doing until partial collision is found.
  • 与以毫秒为单位的其他程序相比,搜索所需的时间太长

如果每次尝试一对随机输入来查找哈希函数中的部分冲突,则必须接受非常长的运行时。对于32位和一个完美的哈希函数,发生冲突的几率为1/(2^32)

要利用生日悖论,您需要存储生成的哈希值,并对照所有哈希值检查新的哈希值。这是有效的,因为您正在寻找冲突,您并不真正关心是什么产生了最终发生冲突的哈希。阅读生日悖论是如何使用人类和生日的,并确保在将其应用于哈希之前理解它。
您只需要77000个哈希,就有50%的机会在它们之间找到32个比特的冲突。

帮助我理解,为什么C++标签?