Estoy escribiendo un código que va a encontrar colisiones para std::hash<std::string>
y tratando de revertir algunos de cálculo de hash pasos.
Hay una multiplicación en std::hash
aplicación.
size_t hash2 = shift_mix(hash1) * mul;
Sé hash2
- desde el paso anterior, también sé que mul
- es el valor de la constante = 0xc6a4a7935bd1e995UL
.
shift_mix(hash1) * mul
causas de desbordamiento (hash2 / mul = 0
), por lo que sólo toma últimos 64 bits resultado de la multiplicación.
Por lo tanto, necesito una manera de encontrar muchas variantes de shift_mix(hash1)
que satisfacen la igualdad. ¿Cuál es la mejor manera de hacerlo? Probablemente de alguna manera el uso de __int128_t
?