हैश फ़ंक्शन आमतौर पर सभी परिणाम बाल्टी में डेटा को समान रूप से वितरित करने के लिए लिखे जाते हैं।
यदि आप मानते हैं कि आपकी फ़ाइलों को उपलब्ध आकारों की एक निश्चित सीमा पर समान रूप से वितरित किया गया है, तो कहें कि केवल 1024 (2^10) आपकी फ़ाइलों के लिए समान रूप से वितरित अलग-अलग आकार हैं। फ़ाइल आकार को सर्वोत्तम रूप से संग्रहीत करने से केवल अलग-अलग फ़ाइल आकारों की संख्या से टक्कर का मौका कम हो जाता है।
नोट: हम इसे 2^32 समान रूप से वितरित और विशिष्ट आकार मान सकते हैं और यह अभी भी बाकी गणित को नहीं बदलता है।
यह आमतौर पर स्वीकार किया जाता है कि एमडी 5 (उदाहरण के लिए) पर टकराव की सामान्य संभावना 1/(2^128)
है।
जब तक कुछ ऐसा नहीं है जो विशेष रूप से हैश फ़ंक्शन में बनाया गया हो जो अन्यथा कहता है। किसी भी मान्य X
ऐसी है कि P(MD5(X) == MD5(X+1))
की संभावना किसी भी दो यादृच्छिक मान {Y
, Z
} कि X
, Y
और Z
के किसी भी मूल्यों के लिए कहना है कि P(MD5(Y) == MD5(Z))
= P(MD5(X) == MD5(X+1))
= 1/(2^128)
है के रूप में एक ही रहता है को देखते हुए।
इसे अलग-अलग फाइलों के 2^10 के साथ जोड़ना मतलब है कि फ़ाइल आकार को संग्रहीत करके आपको अतिरिक्त 10 बिट मिल रही हैं जो इंगित करती हैं कि आइटम अलग हैं या नहीं (फिर यह माना जाता है कि आपकी फ़ाइलें समान रूप से सभी मानों के लिए वितरित की जाती हैं)।
तो सबसे अच्छा आप जो कर रहे हैं, वह < = एन बाइट्स अद्वितीय मूल्यों के लायक के लिए एक और एन बाइट्स जोड़ रहा है (यह कभी भी> एन नहीं हो सकता है)। इसलिए आप SHA-1/2 जैसे कुछ का उपयोग करके अपने हैश फ़ंक्शन द्वारा लौटाए गए बाइट्स को बढ़ाने के लिए बहुत बेहतर हैं क्योंकि यह फ़ाइल आकार को संग्रहीत करने के बजाय हैश मानों का समान रूप से वितरित डेटा देने की अधिक संभावना होगी।
संक्षेप में, यदि MD5 अच्छा नहीं है पर्याप्त के लिए टक्कर न हो, एक मजबूत हैश का उपयोग करता है, तो मजबूत हैश बहुत धीमी गति से कर रहे हैं तो टकराव इस तरह के एक MD5 के रूप में की कम संभावना के साथ एक तेजी हैश का उपयोग, और फिर एक का उपयोग टकराव की संभावना को कम करने के लिए धीमी हैश जैसे SHA-1 या SHA256 है, लेकिन यदि SHA256 पर्याप्त तेज़ है और दोगुनी जगह कोई समस्या नहीं है तो शायद आपको SHA256 का उपयोग करना चाहिए।
कैसे हैशिंग? SHA-1? – bmargulies
@bmargulies: मुझे लगता है कि मैं आम तौर पर पूछ रहा हूं, लेकिन मैं वर्तमान में SHA256 जैसे कुछ स्विच करने पर विचार कर SHA1 का उपयोग कर रहा हूं। मैं बस सोच रहा हूं कि यदि मैं फ़ाइल आकार पर भी कुंजी डाल रहा हूं तो एक हैश कितना समय आवश्यक है। – SqlRyan
मेरे पास एक ही विचार था। हमें हैश फाइलों की आवश्यकता है, लेकिन हमें अधिकतम गति (यानी एमडी 5) की आवश्यकता है और फाइलें आकार में जंगली रूप से भिन्न होती हैं। यदि दो अलग-अलग फ़ाइल आकारों पर एक ही एमडी 5 हैश प्राप्त करना संभव है, तो सुरक्षा की एक अतिरिक्त परत के लिए एमडी 5 + आकार दोनों को स्टोर करना उचित हो सकता है। हम लाखों (शायद यहां तक कि एक बिलियन) फाइलों के माध्यम से हैंशिंग कर रहे हैं, इसलिए हमारे मामले में यह फ़ाइल आकार सहित लायक हो सकता है। – Brain2000