Tôi nhận ra điều này là cũ, nhưng tôi nghĩ rằng tôi sẽ đóng góp giải pháp của mình. Có thể có 2 ^ 128 kết hợp băm. Và do đó xác suất 2 ^ 64 của một nghịch lý ngày sinh. Mặc dù giải pháp dưới đây sẽ không loại trừ khả năng xảy ra va chạm, nhưng nó chắc chắn sẽ làm giảm rủi ro rất đáng kể.
2^64 = 18,446,744,073,709,500,000 possible combinations
Những gì tôi đã làm là tôi đặt một vài hàm băm với nhau dựa trên chuỗi đầu vào để có được một chuỗi kết quả dài hơn nhiều mà bạn coi là hàm băm của mình ...
Vì vậy, mã giả của tôi cho điều này là:
Result = Hash(string) & Hash(Reverse(string)) & Hash(Length(string))
Đó là khả năng không xảy ra va chạm thực tế. Nhưng nếu bạn muốn trở nên siêu hoang tưởng và không thể xảy ra, và không gian lưu trữ không phải là một vấn đề (cũng không phải là chu kỳ tính toá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)))
Được rồi, không phải là giải pháp sạch sẽ nhất, nhưng điều này bây giờ giúp bạn chơi nhiều hơn với mức độ hiếm khi xảy ra va chạm. Đến mức tôi có thể cho rằng thuật ngữ này là không thể xảy ra trong mọi ý nghĩa thực tế.
Vì lợi ích của tôi, tôi nghĩ rằng khả năng xảy ra va chạm là không thường xuyên đến mức tôi sẽ coi điều này không phải là "chắc chắn" nhưng rất khó xảy ra vì nó phù hợp với nhu cầu.
Bây giờ các kết hợp có thể tăng lên đáng kể. Mặc dù bạn có thể mất nhiều thời gian để xem điều này có thể mang lại cho bạn bao nhiêu kết hợp, nhưng về lý thuyết, tôi sẽ nói rằng nó mang lại cho bạn nhiều hơn KÝ KẾT so với con số được trích dẫn ở trên
2^64 (or 18,446,744,073,709,551,616)
Có thể bằng một trăm chữ số hơn hoặc lâu hơn. Mức tối đa lý thuyết mà điều này có thể cung cấp cho bạn sẽ là
Số chuỗi kết quả có thể có:
528294531135665246352339784916516606518847326036121522127960709026673902556724859474417255887657187894674394993257128678882347559502685537250538978462939576908386683999005084168731517676426441053024232908211188404148028292751561738838396898767036476489538580897737998336