【发布时间】:2022-01-02 07:03:31
【问题描述】:
我正在编写一个代码来查找std::hash<std::string> 的冲突,并尝试反转一些哈希计算步骤。
std::hash 实现中有这样的乘法。
size_t hash2 = shift_mix(hash1) * mul;
我知道hash2 - 从上一步,我也知道mul - 它是常数值 = 0xc6a4a7935bd1e995UL。
shift_mix(hash1) * mul 导致溢出(hash2 / mul = 0),所以只取最后 64 位的乘法结果。
所以,我需要一种方法来找到满足相等性的shift_mix(hash1) 的许多变体。最好的方法是什么?可能以某种方式使用__int128_t?
【问题讨论】: