Je suis en train d'écrire un code qui permettra de trouver des collisions std::hash<std::string>
et en essayant de renverser certains de hachage des étapes de calcul.
Il y a une telle multiplication dans std::hash
la mise en œuvre.
size_t hash2 = shift_mix(hash1) * mul;
Je sais hash2
- à partir de l'étape précédente, je sais aussi mul
- c'est la valeur de la constante = 0xc6a4a7935bd1e995UL
.
shift_mix(hash1) * mul
les causes de dépassement (hash2 / mul = 0
), il ne prend que 64 derniers bits de la multiplication résultat.
Donc, j'ai besoin d'un moyen de trouver de nombreuses variantes de shift_mix(hash1)
qui satisfont l'égalité. Quelle est la meilleure façon de le faire? Probablement une certaine façon utiliser __int128_t
?