2010-11-20 20 views
44

मैं एक ऐसी प्रणाली का निर्माण कर रहा हूं जिसे बाइट्स के ब्लब्स को अपडेट किया गया है, तो यह पता लगाने में सक्षम होना चाहिए। पूरे ब्लॉब को संग्रहीत करने के बजाय (वे 5 एमबी तक हो सकते हैं), मुझे लगता है कि मुझे इसके चेकसम की गणना करनी चाहिए, इसे स्टोर करें और थोड़ी देर बाद उसी चेकसम की गणना करें, यह देखने के लिए कि ब्लॉग अपडेट किया गया है या नहीं।मुझे किस चेकसम एल्गोरिदम का उपयोग करना चाहिए?

लक्ष्य निम्नलिखित (इसी क्रम में) कम करने के लिए है:

  • चेकसम के आकार
  • गणना करने के लिए समय टकराव की
  • इस संभावना को (2 समान हो रहा चेकसम सामग्री किया गया है, भले ही संशोधित)।

हमारे सिस्टम के लिए 1/1,000,000 से अधिक टकराव नहीं है। चिंता सुरक्षा नहीं है, लेकिन बस अद्यतन/त्रुटि का पता लगाने, तो दुर्लभ टक्कर ठीक है। (यही कारण है कि मैंने इसे कम करने के लिए चीजों में आखिरी बार रखा)।

इसके अलावा, हम स्वयं टेक्स्ट के ब्लब्स को संशोधित नहीं कर सकते हैं।

बेशक, md5, crc या sha1 दिमाग में आते हैं, और यदि मैं एक त्वरित समाधान चाहता था, तो मैं इसके लिए जाऊंगा। हालांकि, एक त्वरित समाधान से अधिक, मैं देख रहा हूं कि क्या हो सकता है विभिन्न तरीकों की तुलना के साथ-साथ पेशेवरों और विपक्ष

+0

मुझे यह सवाल किसी समुदाय में बदलने में खुशी है, अगर यह समझ में आता है! –

+0

आपकी चिंता क्या है, यहां? क्या आप बस यह देखने के लिए जांच कर रहे हैं कि कुछ समय पहले से आपके डेटा ब्लॉब्स बदल गए हैं, या आप किसी दुर्भावनापूर्ण परिवर्तन का पता लगाने की कोशिश कर रहे हैं? – dajames

+0

बस यह देखने का प्रयास कर रहा है कि उनमें कोई अपडेट किया गया है या नहीं। –

उत्तर

23

मेरा सुझाव है कि आपको this SO page, सीआरसी बनाम एमडी 5/SHA1 पर एक नज़र डालें।
this other thread में गति और टक्कर पर चर्चा की जाती है।
और हमेशा Wikipedia आपके मित्र हैं।

अगर मुझे चुनना है, तो जवाब देने के लिए एक महत्वपूर्ण सवाल है: क्या आप चाहते हैं कि किसी भी मामले में कोई टक्कर न हो - या, कम से कम, संभावना इतनी कम है कि यह संभावना के करीब है कि चंद्रमा अगले 5 मिनट के भीतर पृथ्वी के साथ टक्कर लगी है?

यदि हां, तो SHA परिवार चुनें।
आपके मामले में मैं अद्यतन दिनांक को बदल सकता हूं।
उदाहरण के लिए, एक वृद्धिशील संख्या को ब्लॉब से जोड़ा जा सकता है, और हैश के बजाय भेजा जा सकता है, अद्यतन अद्यतन के लिए अनुरोध की आवश्यकता होगी यदि संख्या दूसरी तरफ अलग है। इस मामले में टक्कर संभावना ~ 10^-18 से को जाता है ~ 0 (मूल रूप से 0 + बग संभावना) ...

संपादित निम्नलिखित टिप्पणी

यह कलनविधि, एल्डर -32, मिले जो 32 बिट्स के सीआरसी के साथ लंबे संदेशों (एमबी) के लिए अच्छा है, यानी ~ 1/10^9 (एमडी 5 128 बिट लंबा है)।
यह गणना करने के लिए तेज़ है।
Adler-32। कुछ नीचे नमूना (लिंक) आते हैं।

+0

मुझे बहुत दुर्लभ टकराव नहीं है। मेरे सिर के ऊपर, 1/1,000,000 की तरह कुछ कम लगता है (हम हर 15 मिनट में औसत से ब्लॉब्स की तुलना करेंगे, इसलिए यह हर 28k सालों में एक टक्कर है। इसके अलावा, मैं पाठ के ब्लब्स को नियंत्रित नहीं करता, इसलिए मैं कर सकता हूं उन्हें खुद को बदलना नहीं है। –

+1

इस मामले में आप एसएचए से तेज़ी से एमडी 5 के लिए जाते हैं, लेकिन अधिक टकराव-प्रवण (आपकी आवश्यकता के करीब होने की संभावना) –

+0

लेकिन एमडी 5 32 बिट है, जो काफी बड़ा है और टक्कर संभाव्यता बहुत कम है 1/1,000,000 ... इसलिए मुझे नहीं लगता कि यह एक अच्छा उम्मीदवार है! हम बेहतर कर सकते हैं! –

0

Blake2 सबसे तेजी से हैश समारोह का उपयोग कर सकते है और वह मुख्य रूप से अपनाया जाता है:

BLAKE2 अन्य अच्छे हैश फंक्शन से न केवल तेजी से होता है, यह भी तेजी से MD5 या SHA-1 से Source है

एसएचए -3 प्रतियोगिता का विजेता केक्कक एल्गोरिदम था लेकिन अभी तक एक लोकप्रिय कार्यान्वयन नहीं है जिसे डिफ़ॉल्ट रूप से जीएनयू/लिनक्स वितरण में अपनाया गया है। इसके बजाए, एक एसएए -3 प्रतियोगिता उम्मीदवार ब्लेक 2 केक्कक से तेज है और GNU coreutils का हिस्सा है। तो आप GNU/Linux वितरण पर आप b2sum का उपयोग Blake2 हैश एल्गोरिदम का उपयोग करने के लिए कर सकते हैं।

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