Mir ist klar, dass dies alt ist, aber ich dachte, ich würde meine Lösung beitragen. Es gibt 2 ^ 128 mögliche Hash-Kombinationen. Und damit eine 2 ^ 64 Wahrscheinlichkeit eines Geburtstagsparadoxons. Während die unten stehende Lösung die Möglichkeit von Kollisionen nicht ausschließt, wird sie das Risiko sicherlich um einen sehr erheblichen Betrag reduzieren.
2^64 = 18,446,744,073,709,500,000 possible combinations
Was ich getan habe, ist, dass ich ein paar Hashes basierend auf der Eingabezeichenfolge zusammengestellt habe, um eine viel längere resultierende Zeichenfolge zu erhalten, die Sie als Ihren Hash betrachten ...
Mein Pseudocode dafür ist also:
Result = Hash(string) & Hash(Reverse(string)) & Hash(Length(string))
Das ist zur praktischen Unwahrscheinlichkeit einer Kollision. Aber wenn Sie super paranoid sein wollen und es nicht passieren lassen können und Speicherplatz kein Problem ist (und auch keine Rechenzyklen) ...
Result = Hash(string) & Hash(Reverse(string)) & Hash(Length(string))
& Hash(Reverse(SpellOutLengthWithWords(Length(string))))
& Hash(Rotate13(string)) Hash(Hash(string)) & Hash(Reverse(Hash(string)))
Okay, nicht die sauberste Lösung, aber jetzt können Sie viel mehr damit spielen, wie selten Sie auf eine Kollision stoßen. Bis zu dem Punkt könnte ich Unmöglichkeit im wahrsten Sinne des Wortes annehmen.
Meiner Meinung nach ist die Möglichkeit einer Kollision selten genug, so dass ich dies als nicht "todsicher" betrachten werde, aber so unwahrscheinlich, dass es der Notwendigkeit entspricht.
Jetzt steigen die möglichen Kombinationen deutlich an. Während Sie eine lange Zeit damit verbringen könnten, wie viele Kombinationen Sie erhalten könnten, werde ich theoretisch sagen, dass es Sie BEDEUTEND mehr als die oben angegebene Zahl von landet
2^64 (or 18,446,744,073,709,551,616)
Wahrscheinlich um hundert weitere Ziffern oder so. Das theoretische Maximum, das dies Ihnen geben könnte, wäre
Mögliche Anzahl der resultierenden Zeichenfolgen:
528294531135665246352339784916516606518847326036121522127960709026673902556724859474417255887657187894674394993257128678882347559502685537250538978462939576908386683999005084168731517676426441053024232908211188404148028292751561738838396898767036476489538580897737998336