ฉันรู้ว่านี่เป็นเรื่องเก่า แต่คิดว่าฉันจะช่วยแก้ปัญหาของฉัน มีการผสมแฮชที่เป็นไปได้ 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