Píšem kód, ktorý nájdete zrážok pre std::hash<std::string>
a snaží zvrátiť niektoré hash výpočet krokov.
Tam je taká násobenie v std::hash
implementáciu.
size_t hash2 = shift_mix(hash1) * mul;
Viem, hash2
- z predchádzajúceho kroku, aj ja viem mul
- je to konštantná hodnota = 0xc6a4a7935bd1e995UL
.
shift_mix(hash1) * mul
spôsobuje pretečenia (hash2 / mul = 0
), tak to trvá len posledných 64 bitov násobenie výsledok.
Takže, potrebujem spôsob, ako nájsť mnoho variantov shift_mix(hash1)
ktoré spĺňajú rovnosť. Aký je najlepší spôsob, ako to urobiť? Pravdepodobne nejako použitie __int128_t
?