我正在编写一个代码,它将找到冲突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
?