减少的SHA1哈希的部分冲突
Partial collision for Reduced SHA1 hash
我正在做一个项目,寻找两个不同的句子,它们基于减少的sha1哈希产生部分冲突。我的程序将生成两个不同的消息。如果两个句子的散列的前32位匹配,程序将停止,否则将重复,直到检测到冲突。
我的程序运行良好,但搜索碰撞所需的时间太慢了。我怎样才能加快速度。我读了一遍,发现我可以使用生日悖论,我该如何实现?
我做了一些搜索并得到了相关的答案,但我仍然对生日悖论感到困惑。
SHA1碰撞的概率
SHA1碰撞演示/示例
http://www.metzdowd.com/pipermail/cryptography/2004-August/007409.html
http://www.freelists.org/post/hashcash/Hashcash-and-the-cracking-of-SHA1,2
我的程序就是这样工作的:
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位的冲突。
相关文章:
- 写入位置0x0000000C时发生访问冲突
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 使用Qt C++计算类似Git的SHA1哈希
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 链表中写入访问冲突的未知原因
- C++中的openCV Mat访问冲突
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- C++尝试深度复制唯一指针时出现内存访问冲突
- 错误:使用通用引用的声明冲突
- 如何解决GTest和LibTorch联动冲突
- 两个运营商的一些奇怪的冲突<<
- 如何在多个线程中创建 QSql数据库连接时防止名称冲突
- C++ 中动态二维数组的访问冲突
- 从嵌套循环中的 std::list 中删除将返回访问冲突
- C++17 十六进制浮点文字单精度后缀冲突?
- 结构字段名称与 GDB 中的 STL 数组冲突
- 写入访问冲突异常
- 减少的SHA1哈希的部分冲突