Я понимаю, что это устарело, но думал, что внесу свое решение. Есть 2 ^ 128 возможных комбинаций хешей. Таким образом, вероятность парадокса дня рождения составляет 2 ^ 64. Хотя приведенное ниже решение не исключает возможность столкновений, оно, несомненно, значительно снизит риск.
2^64 = 18,446,744,073,709,500,000 possible combinations
Я собрал несколько хешей на основе входной строки, чтобы получить гораздо более длинную результирующую строку, которую вы считаете своим хешем ...
Итак, мой псевдокод для этого:
Result = Hash(string) & Hash(Reverse(string)) & Hash(Length(string))
То есть практической невозможности столкновения. Но если вы хотите быть суперпараноиком и не можете этого допустить, а место для хранения не является проблемой (как и вычислительные циклы) ...
Result = Hash(string) & Hash(Reverse(string)) & Hash(Length(string))
& Hash(Reverse(SpellOutLengthWithWords(Length(string))))
& Hash(Rotate13(string)) Hash(Hash(string)) & Hash(Reverse(Hash(string)))
Ладно, не самое чистое решение, но теперь у вас гораздо больше возможностей поиграть с тем, как редко вы будете сталкиваться с столкновениями. Я могу предположить невозможность во всех реалистичных смыслах этого слова.
Ради себя, я думаю, что вероятность столкновения достаточно редка, и я буду считать это не «верным», но настолько маловероятным, что это может удовлетворить потребность.
Теперь количество возможных комбинаций значительно увеличивается. Хотя вы можете потратить много времени на то, сколько комбинаций это может дать вам, я скажу, что теоретически это дает вам ЗНАЧИТЕЛЬНО больше, чем указанное выше число
2^64 (or 18,446,744,073,709,551,616)
Вероятно, еще на сотню цифр или около того. Теоретический максимум, который это может дать вам, будет
Возможное количество результирующих строк:
528294531135665246352339784916516606518847326036121522127960709026673902556724859474417255887657187894674394993257128678882347559502685537250538978462939576908386683999005084168731517676426441053024232908211188404148028292751561738838396898767036476489538580897737998336