2010-05-06 13 views
6

मैं identifying files with unknown origin के लिए MD5 हैश का उपयोग करता हूं। यहां कोई हमलावर नहीं है, इसलिए मुझे परवाह नहीं है कि एमडी 5 टूटा गया है और कोई इरादे से टकराव उत्पन्न कर सकता है।क्या मैं डेटा पहचान के लिए एमडी 5 हैश का हिस्सा उपयोग कर सकता हूं?

मेरी समस्या है कि मुझे लॉगिंग प्रदान करने की आवश्यकता है ताकि विभिन्न समस्याओं का निदान आसान हो। यदि मैं हर हैश को एक हेक्स स्ट्रिंग के रूप में लॉग करता हूं जो बहुत लंबा, असुविधाजनक और बदसूरत दिखता है, तो मैं हैश स्ट्रिंग को छोटा करना चाहता हूं।

अब मुझे पता है कि केवल GUID is a very bad idea का एक छोटा सा हिस्सा लेना - GUID को अद्वितीय होने के लिए डिज़ाइन किया गया है, लेकिन उनमें से कोई हिस्सा नहीं है।

एमडी 5 के लिए भी यही सच है - क्या मैं एमडी 5 के पहले 4 बाइट्स कह सकता हूं और मान लेता हूं कि मूल हैश की तुलना में बाइट्स की कम संख्या के कारण मुझे केवल टकराव की संभावना अधिक है?

+0

http://stackoverflow.com/questions/860405/are-the-first-32-bits-of-an-md5-hash-just-as-random-as-any-other-substring –

+0

का संभावित डुप्लिकेट मैं सोच रहा हूं कि पहले 4 बाइट्स प्राप्त करना एमडी 5 हैश के सीआरसी 32 का उपयोग करने से बेहतर है। –

+0

हां, क्योंकि एमडी 5 में पहली 32 बिट पूरी तरह यादृच्छिक रूप से वितरित की जानी चाहिए, इसलिए आप वितरण में सुधार नहीं कर सकते हैं। –

उत्तर

7

कम जवाब है हां, तो आप एक आईडी के रूप में पहले 4 बाइट्स का उपयोग कर सकते है का उल्लेख कर सकते है। जन्मदिन विरोधाभास हालांकि से सावधान रहें:

http://en.wikipedia.org/wiki/Birthday_paradox

एक टक्कर के खतरे को तेजी से आप अधिक फ़ाइलें जोड़ने के रूप में बढ़ जाती है। 50,000 के साथ लगभग 25% मौका है कि आपको एक आईडी टकराव मिलेगा।

संपादित करें: ठीक है, सिर्फ अपने अन्य प्रश्न के लिए लिंक पढ़ सकते हैं और 100,000 टक्कर की संभावना को फाइलों के साथ लगभग 70% है।

1

हैश को छोटा करने का एक और तरीका है इसे बेस 64 या कुछ संस्करण जैसे हेक्स से अधिक कुशल में परिवर्तित करना है।

भले ही आप 4 अक्षरों को लेने के लिए निर्धारित हैं, बेस 64 के 4 अक्षर लेते हुए आपको हेक्स की तुलना में अधिक बिट्स मिलते हैं।

+0

केवल तभी जब आप हेक्स को इसके 0-एफ फॉर्म में बदल देते हैं। आप अभी भी कच्चे बाइट मूल्य ले सकते हैं और इसके बजाए इसका उपयोग कर सकते हैं। उस मामले में बेस -64 की तुलना में अधिक बिट्स होंगे – Sekhat

संबंधित मुद्दे