Je me rends compte que c'est vieux, mais j'ai pensé que j'apporterais ma solution. Il existe 2 ^ 128 combinaisons de hachage possibles. Et donc une probabilité de 2 ^ 64 d'un paradoxe d'anniversaire. Bien que la solution ci-dessous n'élimine pas la possibilité de collisions, elle réduira certainement le risque de manière très substantielle.
2^64 = 18,446,744,073,709,500,000 possible combinations
Ce que j'ai fait est de rassembler quelques hachages en fonction de la chaîne d'entrée pour obtenir une chaîne résultante beaucoup plus longue que vous considérez comme votre hachage ...
Donc, mon pseudo-code pour cela est:
Result = Hash(string) & Hash(Reverse(string)) & Hash(Length(string))
C'est à l'improbabilité pratique d'une collision. Mais si vous voulez être super paranoïaque et que cela ne peut pas arriver, et l'espace de stockage n'est pas un problème (pas plus que les cycles de calcul) ...
Result = Hash(string) & Hash(Reverse(string)) & Hash(Length(string))
& Hash(Reverse(SpellOutLengthWithWords(Length(string))))
& Hash(Rotate13(string)) Hash(Hash(string)) & Hash(Reverse(Hash(string)))
D'accord, ce n'est pas la solution la plus propre, mais cela vous permet désormais de jouer beaucoup plus avec la fréquence à laquelle vous rencontrez une collision. Au point que je pourrais supposer l'impossibilité dans tous les sens réalistes du terme.
Pour moi, je pense que la possibilité d'une collision est assez peu fréquente pour que je considère que cela n'est pas "infaillible", mais si peu probable qu'il se produise que cela convient au besoin.
Maintenant, les combinaisons possibles augmentent considérablement. Bien que vous puissiez passer beaucoup de temps sur le nombre de combinaisons que cela pourrait vous apporter, je dirai qu'en théorie, cela vous rapporte significativement plus que le nombre cité ci-dessus de
2^64 (or 18,446,744,073,709,551,616)
Probablement par une centaine de chiffres de plus environ. Le maximum théorique que cela pourrait vous donner serait
Nombre possible de chaînes résultantes:
528294531135665246352339784916516606518847326036121522127960709026673902556724859474417255887657187894674394993257128678882347559502685537250538978462939576908386683999005084168731517676426441053024232908211188404148028292751561738838396898767036476489538580897737998336