Me doy cuenta de que esto es antiguo, pero pensé en contribuir con mi solución. Hay 2 ^ 128 posibles combinaciones de hash. Y así una probabilidad de 2 ^ 64 de una paradoja de cumpleaños. Si bien la solución a continuación no eliminará la posibilidad de colisiones, seguramente reducirá el riesgo en una cantidad muy sustancial.
2^64 = 18,446,744,073,709,500,000 possible combinations
Lo que he hecho es juntar algunos hash en función de la cadena de entrada para obtener una cadena resultante mucho más larga que considere su hash ...
Entonces mi pseudocódigo para esto es:
Result = Hash(string) & Hash(Reverse(string)) & Hash(Length(string))
Eso es prácticamente improbabilidad de una colisión. Pero si quieres ser súper paranoico y no puedes permitir que suceda, y el espacio de almacenamiento no es un problema (ni los ciclos de computación) ...
Result = Hash(string) & Hash(Reverse(string)) & Hash(Length(string))
& Hash(Reverse(SpellOutLengthWithWords(Length(string))))
& Hash(Rotate13(string)) Hash(Hash(string)) & Hash(Reverse(Hash(string)))
De acuerdo, no es la solución más limpia, pero esto ahora le permite jugar mucho más con la poca frecuencia con la que se encontrará con una colisión. Hasta el punto que podría asumir la imposibilidad en todos los sentidos realistas del término.
Por mi bien, creo que la posibilidad de una colisión es lo suficientemente poco frecuente como para considerar que esto no es "seguro", pero es tan poco probable que suceda que se adapte a la necesidad.
Ahora las combinaciones posibles aumentan significativamente. Si bien podría dedicar mucho tiempo a la cantidad de combinaciones que esto podría obtener, diré que, en teoría, lo llevará SIGNIFICATIVAMENTE más que el número citado anteriormente de
2^64 (or 18,446,744,073,709,551,616)
Probablemente unos cien dígitos más. El máximo teórico que esto podría darte sería
Posible número de cadenas resultantes:
528294531135665246352339784916516606518847326036121522127960709026673902556724859474417255887657187894674394993257128678882347559502685537250538978462939576908386683999005084168731517676426441053024232908211188404148028292751561738838396898767036476489538580897737998336