使用 Murmur2 64 位哈希函数生成会导致冲突的输入
Generate input that would cause collisions using Murmur2 64bit hash function
我被困在一个任务上,该任务包括在std::unordered_set
中查找漏洞,该漏洞只是在一个循环的unordered_set<string>
中插入一些字符串:
for (const auto& user : users_list) {
users.insert(user);
}
有关详细信息,请参阅完整的源代码。
在 UBUNTU 上编译的文件如下:
g++ -std=c++14 -O2 -Wall run.cpp -o run
任务是提供一个输入,使该程序返回非零状态代码。
有什么想法去哪里看吗?提示是默认哈希函数有一些东西,并且该程序是在 ubuntu 上编译的。
听起来你的教授希望你找到并利用哈希碰撞攻击。必须生成所有哈希值相同的输入,以便哈希表查找必须使用集合的每个值strcmp
新值,以便在插入之前查看是否存在重复项。
下一步应该是在系统上找到std::string
的哈希算法并反转它,以便您可以生成具有相同哈希值的这些输入。
或者,只需暴力破解:生成数百万或十亿个随机字符串,std::hash
它们并存储映射到相同哈希值的字符串。
在libstc++ HEAD上,std::hash<string>
在这里定义。它调用Hash_bytes,最终调用哈希函数基于种子 0xc70f6907UL 的 MurmurHashUnaligned2。
相关文章:
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 2D数组来自文本输入,中间有空格
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 检查输入是否不是整数或数字
- 正在尝试了解输入验证循环
- 读取文件并输入到矢量中
- C++如何通过用户输入删除列表元素
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 写入位置0x0000000C时发生访问冲突
- 如何使用用户输入在C++中正确填充2D数组
- C++MySQL C api用户输入行
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- 用户定义函数中的指针和输入
- 如何在C++中检查2D数组中负值的输入验证
- 使用 Murmur2 64 位哈希函数生成会导致冲突的输入
- 错误访问冲突写入位置0x00229C20.尝试在控制台中输入字符串时
- 从二进制文件获取输入时发生访问冲突错误
- 文件输入的访问冲突读取位置