2010-05-11 12 views
6

क्या यह निर्धारित करने का एक विश्वसनीय तरीका है कि दो फाइलें समान हैं या नहीं? उदाहरण के लिए, एक ही आकार और प्रकार वाली दो फाइलें समान बिनारिली हो सकती हैं या नहीं भी हो सकती हैं (हाँ, मुझे पता है कि यह वास्तव में एक शब्द नहीं है)। मुझे लगता है कि फ़ाइलों में मदद मिलेगी की एक या दो चेकसम की तुलना मान, लेकिन मुझे आश्चर्य है कि:यह निर्धारित करना कि फ़ाइल एक डुप्लिकेट है

  1. चेकसम कैसे विश्वसनीय हैं निर्धारित करता है कि दो फ़ाइलें अलग हैं पर; एक ही चेकसम वाले दो अलग-अलग फाइलों की संभावना क्या है?
  2. द्वारा अतिरिक्त चेकसम तुलना लागू करने से विश्वसनीयता में वृद्धि होगी?
  3. कौन सा चेकसम एल्गोरिदम सबसे कुशल और/या विश्वसनीय होगा?

कोई भी विचार, सुझाव या विचारों की सराहना की जाती है!

पीएस इसके लिए कोड जावा में एक निक्स सिस्टम पर चल रहा है, लेकिन जेनेरिक या प्लेटफार्म अज्ञेय इनपुट सबसे उपयोगी है।

+3

विचार के लिए अतिरिक्त भोजन ... मैं डुप्लिकेट फ़ाइलों को कम करने के समान कुछ पर काम कर रहा था और पाया कि आंशिक रकम करने से प्रक्रिया बहुत बढ़ गई है। पहले 4k पर SHA-1 की गणना करें। अगर वे वही हैं, तो पूरी फाइल करें। आप पहले अंतर पर बैलिंग, पहले 4k बाइट्स की तुलना भी सीधे कर सकते हैं। सभी इस बात पर निर्भर करते हैं कि आपका अंतिम लक्ष्य क्या है। – basszero

उत्तर

5
1) Very reliable 
2) Not theoretically 
3) SHA-1 
+1

2 नहीं होना चाहिए) "अभ्यास में नहीं" या "सैद्धांतिक रूप से" होना चाहिए? विश्वसनीयता सिद्धांत में निश्चित रूप से बढ़ जाती है। – IVlad

+0

आह, तुम्हारा मतलब है कि उसका मतलब कई चेकसम है? एक sha1 और md5 की तरह है? – zaf

+0

@zaf: हाँ, कम से कम मुझे आशा है कि उसका मतलब है :)। – IVlad

0

एमडी 5 के रूप में कोई भी मानक चेकसम एल्गोरिदम आपको वास्तविक जीवन परिदृश्यों के लिए विश्वसनीय परीक्षण देगा। यदि आपको और भी विश्वसनीयता की आवश्यकता है, तो एसएचए जाओ। http://en.wikipedia.org/wiki/Cryptographic_hash_function#Cryptographic_hash_algorithms

6

निश्चित रूप से जानना असंभव है कि दो फाइलें समान हैं या नहीं, जब तक आप बाइट के लिए बाइट की तुलना नहीं करते हैं। यह इस बात की तरह है कि आप इस बात की गारंटी नहीं दे सकते कि संग्रह में कोई ऑब्जेक्ट नहीं होता है या नहीं, जब तक आप संग्रह में प्रत्येक आइटम की जांच नहीं करते।

चेकसम मूल रूप से एक हैश हैं। चाहे वे आपके उद्देश्यों के लिए पर्याप्त हों, इस पर निर्भर करता है कि आपका ऐप कितना मिशन-महत्वपूर्ण है। टकराव के कम जोखिम के साथ हैश फ़ंक्शन बनाना निश्चित रूप से संभव है; आखिरकार, पासवर्ड धोए जाते हैं, यहां तक ​​कि उन परिस्थितियों में जहां वे संवेदनशील डेटा की रक्षा करते हैं और आप अपने खाते पर दूसरा वैध पासवर्ड नहीं चाहते हैं। जब तक आप कोड लिख रहे हों, कहें, एक बैंक, एक मजबूत चेकसम एल्गोरिदम को बहुत अच्छा अनुमान प्रदान करना चाहिए।

एकाधिक चेकसम का उपयोग विश्वसनीयता और विश्वसनीयता केवल तभी होगा जब अलग-अलग चेकसम एल्गोरिदम अलग-अलग हैश फ़ंक्शन का उपयोग करते हैं।

आपका तीसरा प्रश्न पहले ही लियोब्लॉय के जवाब से ख्याल रखा गया है; एमडी 5 और एसएचए -1 आम हैं।

+0

-1 हैश और चेकसम –

+1

@ ब्लूराजा के बीच स्पष्ट भ्रम के लिए, कैसे? – Pops

+0

'चेकसम मूल रूप से एक हैश है।' यह दूसरी तरफ है - हैश मूल रूप से चेकसम हैं, लेकिन अधिक कठोर आवश्यकताओं के साथ। 'टकराव के कम जोखिम के साथ हैश फ़ंक्शन बनाना निश्चित रूप से संभव है' हैश को सांख्यिकीय रूप से संभवतः टकराव का जोखिम कम करने के लिए डिज़ाइन किया गया है। कुछ और बस हैश नहीं है। 'एक मजबूत चेकसम एल्गोरिदम को एक हैश का बहुत अच्छा अनुमान देना चाहिए]' हैश और चेकसम बहुत अलग उद्देश्यों वाले समान जानवर हैं। सीआरसी 32 एक महान चेकसम है, लेकिन एक लुसी हैश। बीसीक्रिप्ट एक महान हैश है, लेकिन एक लुसी चेकसम (यह बहुत धीमा है)। ब्लूराजा के "स्पष्ट भ्रम" को संतुलित करने के लिए –

0

कोई भी चेकसम आपको बहुत कम मामलों के लिए झूठी सकारात्मक देगा। यदि आप इसके साथ रह सकते हैं, ठीक है। यदि नहीं, तो ऐसा करने का तरीका पहले चेकसम तुलना करना है, और यदि चेकसम एक बाइट-बाय-बाइट परीक्षण के बराबर हैं। बाइट-बाय-बाइट टेस्ट बहुत ही कम किया जाएगा, इसलिए बहुत सारी तुलनाओं पर औसत लागत बहुत कम होगी। हालांकि यह ऐसा नहीं है जब आपकी अधिकांश तुलनाओं को 'सत्य' वापस करने की उम्मीद है।

यह भी निर्भर करता है कि आप कितनी अलग फाइलों का परीक्षण कर रहे हैं। एक उच्च विश्वसनीयता चेकसम का आकलन करना तुलनात्मक रूप से महंगा है - यदि प्रत्येक फ़ाइल लगभग एक बार तुलना की जाती है तो तुलना करना सस्ता हो सकता है।

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