क्या दो फ़ाइलों के लिए एक समान क्रिप्टोग्राफ़िक हैश या चेकसम का मतलब है कि वे समान हैं?


57

मेरे पास 2 एक्सेल दस्तावेज़ हैं और मैं जांचना चाहता हूं कि क्या वे फ़ाइल नाम के अलावा बिल्कुल समान हैं।

उदाहरण के लिए, फ़ाइलों को बुलाया जाता है fileone.xlsऔर filetwo.xls। फ़ाइल नामों के अलावा, उनकी सामग्री समान होने का अनुमान लगाया गया है लेकिन यह वही है जो मैं जांचना चाहता हूं।

मैं इस तरीके की समीक्षा करने और प्लगइन्स का एक गुच्छा स्थापित किए बिना खोज रहा हूं। वहाँ एक सीधे आगे रास्ता नहीं लगता है।

मैंने दोनों फाइलों के लिए एमडी 5 हैश पैदा करने की कोशिश की है। जब हैश समान होते हैं, तो क्या इसका मतलब यह है कि फ़ाइल सामग्री 1: 1 समान है?


8
क्रिप्टोकरंसी और कभी-कभी सामान्य हैश भी विभिन्न प्रणालियों की फाइलों की तुलना करने, या बड़ी संख्या में फाइलों के बीच खोज करने के लिए उपयोगी हो सकते हैं, लेकिन अगर दो फाइलें एक ही सिस्टम पर हैं, तो आप आसानी से विंडोज cmpपर यूनिक्स या fc(फाइल तुलना) पर उनकी तुलना कर सकते हैं ।
dave_thompson_085

10
shattered.io - SHA1 md5 की तुलना में "मजबूत" हैशिंग एल्गोरिथ्म है और अभी भी बिखर रहा है ।io/static/ shattered -1.pdf और shattered.io/static/shattered-2.pdf पूरी तरह से अलग होने के दौरान समान हैश मान है।
स्टायरोफोम

30
साइड नोट: पहले उनके आकार की जांच करें। यदि उनके पास अलग-अलग आकार हैं, तो फ़ाइलों को खोलने में परेशान न हों, वे अलग हैं।
एमिलियो एम बुमचार

42
सरलीकृत संस्करण: एक एमडी 5 हैश एक दुर्घटना से बचाने के लिए पर्याप्त है , यह फिर से दुर्भावना को रोकने के लिए पर्याप्त नहीं है । चाहे वह आपके लिए बहुत अच्छा हो, आपको अपनी परिस्थितियों के आधार पर निर्णय लेना होगा।
यूरो माइकेल

9
diff -s file1 file2अगर यह कहता है कि वे समान हैं, तो वे समान हैं (यह वास्तव में फाइलों की बाइट-प्रति-बाइट की तुलना करता है, यहां तक ​​कि हैश टकराव को भी बाहर रखा गया है)। चेकसम का उपयोग तब किया जाता है जब आपके पास केवल एक हैश और एक आइटम होता है जिसे उस हैश के प्रवर्तक के समान माना जाता है।
बकुरीउ

जवाबों:


93

जब हैश समान होते हैं, तो क्या इसका मतलब यह है कि फ़ाइल सामग्री 1: 1 समान है?

सभी फाइलें बाइट्स का मान हैं (मान 0-255)। यदि दो फाइलें एमडी 5 हैश मैच होती हैं, तो बाइट्स के दोनों संग्रह बिल्कुल समान (समान क्रम, समान मान) होने की संभावना है।

बहुत कम संभावना है कि दो फाइलें एक ही एमडी 5 उत्पन्न कर सकती हैं, जो कि 128 बिट हैश है। संभावना है:

बस दो हैश की गलती से टकराने की संभावना 1/2 128 है, जो कि 1 में 340 undecillion 282 decillion 366 nonillion 920 octillion 938 septillion 463 sextillion 463 क्विंटिलियन 374 क्वाड्रिलियन 607 ट्रिलियन +31 बिलियन 768 मिलियन 216 456 में से 1 है। ( StackOverflow पर एक उत्तर से )।

हाशेज़ का अर्थ "केवल एक दिशा में काम करना" है - यानी आप बाइट्स का एक संग्रह लेते हैं और एक हैश प्राप्त करते हैं, लेकिन आप एक हैश नहीं ले सकते हैं और बाइट्स का एक संग्रह प्राप्त कर सकते हैं।

क्रिप्टोग्राफी इस पर निर्भर करती है (यह एक तरह से दो चीजों की तुलना यह जानने के बिना की जा सकती है कि वे चीजें क्या हैं।)

वर्ष 2005 के आसपास, MD5 हैश लेने और डेटा बनाने वाले तरीकों की खोज की गई, जो हैश से मेल खाते हैं, जो दो दस्तावेज बनाते हैं जिनमें MD5 हैश ( टक्कर का हमला ) था। @ User2357112 की टिप्पणी नीचे देखें। इसका मतलब है कि एक हमलावर दो निष्पादक बना सकता है, उदाहरण के लिए, जिसके पास समान एमडी 5 है, और यदि आप एमडी 5 पर निर्भर हैं कि किस पर भरोसा करना है, तो आपको बेवकूफ बनाया जाएगा।

इस प्रकार एमडी 5 का उपयोग क्रिप्टोग्राफी या सुरक्षा के लिए नहीं किया जाना चाहिए। उदाहरण के लिए, अखंडता डाउनलोड करने के लिए एक डाउनलोड साइट पर एमडी 5 प्रकाशित करना बुरा है। MD5 हैश के आधार पर आपने फ़ाइल या डेटा सामग्री को सत्यापित करने के लिए खुद को उत्पन्न नहीं किया है, जिससे आप बचना चाहते हैं।

यदि आप अपना स्वयं का उत्पादन करते हैं, तो आप जानते हैं कि आप खुद के प्रति दुर्भावनापूर्ण नहीं हैं (उम्मीद है)। तो आपके उपयोग के लिए, यह ठीक है, लेकिन अगर आप चाहते हैं कि कोई और इसे पुन: पेश करने में सक्षम हो, और आप सार्वजनिक रूप से एमडी 5 हैश प्रकाशित करना चाहते हैं, तो बेहतर हैश का उपयोग किया जाना चाहिए।


ध्यान दें कि दो एक्सेल फ़ाइलों के लिए समान पंक्तियों और स्तंभों में समान मान सम्‍मिलित करना संभव है, लेकिन अलग-अलग स्वरूपण, शैली, सेटिंग आदि के कारण फ़ाइल के बायस्ट्रीम के लिए पूरी तरह से अलग होना चाहिए।

यदि आप फ़ाइल में डेटा की तुलना करना चाहते हैं, तो पहले CSV को उसी पंक्तियों और स्तंभों के साथ निर्यात करें, सभी स्वरूपण को अलग करने के लिए, और फिर हैश या CSV की तुलना करें।


107
एक्सेल फाइलें, और अन्य कार्यालय दस्तावेजों में भी अलग-अलग हैश हो सकते हैं क्योंकि उन्हें खोला गया है और कुछ भी बदले बिना फिर से बचाया गया है, फ़ाइल में मेटाडेटा के कारण अंतिम सहेजे गए डेटाइम के लिए एक नया मान संग्रहीत है।
बेवुल्फनोडे42

29
बोनस: यदि आपने CSV को निर्यात किया है, तो आप diffवास्तव में फ़ाइलों की बाइट-बाइट समान होने की पुष्टि करने के लिए आदरणीय या समान उपयोगिता का उपयोग कर सकते हैं , न कि केवल उसी हैश की।
मोंटी हार्डर

18
एक हैश लेना और हैश से मेल खाने वाले डेटा बनाना एक प्रारंभिक हमला है। मेरा मानना ​​है कि एमडी 5 वर्तमान में टकराव के हमलों की चपेट में है, लेकिन मुझे नहीं लगता है कि प्रीइमेज या सेकंड-प्रिमेज हमले वर्तमान में व्यवहार्य हैं।
user2357112

2
@ क्या कह रहे हो? उन्होंने कहा: उन्हें सीएसवी को निर्यात करें और diff -sयह जांचने के लिए उपयोग करें कि क्या सीएसवी समान हैं। वास्तव में आप diff -sएक्सेल फाइल भी कर सकते हैं : यदि diffवे कहते हैं कि आप समान हैं तो आपको सीएसवी तुलना में जाने की आवश्यकता नहीं है।
बकुरीउ

2
@ बकुरी स्पष्ट रूप से मेरी टिप्पणी बहुत खराब थी - मेरा मतलब था कि सीएसवी को निर्यात करने से बहुत सारी जानकारी खो जाएगी - विशेष रूप से सूत्र, चार्ट, सशर्त और मानक प्रारूपण।
टिम

37

व्यवहार में, हां, एक समान क्रिप्टोग्राफिक हैश का अर्थ है कि फाइलें समान हैं, जब तक कि फाइलों को किसी हमलावर या अन्य दुर्भावनापूर्ण इकाई द्वारा तैयार नहीं किया गया था। की बाधाओं यादृच्छिक किसी भी अच्छी तरह से डिजाइन क्रिप्टोग्राफिक हैश समारोह के साथ टकराव के रूप में व्यवहार में और एक सक्रिय हमलावर के अभाव में नगण्य इतना छोटा है।

सामान्य तौर पर, हालांकि, नहीं, हम यह नहीं कह सकते हैं कि एक ही हैश वाली दो मनमानी फाइलें निश्चित रूप से इसका मतलब है कि वे समान हैं।

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

यदि हैश फ़ंक्शन का इनपुट हैश फ़ंक्शन के आउटपुट से अधिक लंबा है, तो आउटपुट में इनपुट फिट करने के लिए कुछ निष्ठा को हटाया जाना चाहिए। नतीजतन, आउटपुट की लंबाई से अधिक लंबाई के कई इनपुट मौजूद होने चाहिए, जो समान आउटपुट उत्पन्न करते हैं।

एक उदाहरण के रूप में, वर्तमान वर्कहॉर्स, SHA-256 को लेते हैं। यह 256 बिट्स या 32 बाइट्स के हैश का उत्पादन करता है। यदि आपके पास दो फाइलें हैं जो प्रत्येक 32 बाइट्स लंबी हैं, लेकिन अलग-अलग हैं, तो इन्हें (एल्गोरिथ्म में कोई दोष नहीं मानते) अलग-अलग मानों के लिए हैश, कोई बात नहीं फ़ाइलों की सामग्री; गणितीय संदर्भ में, हैश एक समारोह एक 2 मानचित्रण है 256 एक 2 पर इनपुट अंतरिक्ष 256 उत्पादन अंतरिक्ष, जो टकराव के बिना ऐसा करना संभव होना चाहिए। हालाँकि, अगर आपके पास दो फाइलें हैं जो प्रत्येक 33 बाइट्स लंबी हैं, तो कुछ ऐसे इनपुट्स का संयोजन होना चाहिए जो दोनों फाइलों के लिए समान 32-बाइट आउटपुट हैश मान दें, क्योंकि अब हम 2 256 पर 2 264 इनपुट स्पेस की मैपिंग कर रहे हैं।उत्पादन स्थान; यहां, हम आसानी से देख सकते हैं कि हर एक आउटपुट के लिए औसतन 2 8 इनपुट मौजूद होने चाहिए । इसे आगे ले जाएं, और 64-बाइट फ़ाइलों के साथ हर एक आउटपुट के लिए 2 256 इनपुट मौजूद होने चाहिए !

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

हमलावरों का विरोध करने पर कुछ एल्गोरिदम दूसरों की तुलना में बेहतर हैं। एमडी 5 को आम तौर पर इन दिनों पूरी तरह से टूटा हुआ माना जाता है, लेकिन आखिरी बार मैंने देखा, यह अभी भी बहुत अच्छा पहला शिकार प्रतिरोध खेल रहा है। SHA-1 वैसे ही प्रभावी रूप से टूट गया है; प्रीइमेज हमलों का प्रदर्शन किया गया है, लेकिन विशिष्ट परिस्थितियों की आवश्यकता होती है, हालांकि यह मानने का कोई कारण नहीं है कि यह अनिश्चित काल के लिए मामला होगा; जैसा कि कहा जाता है, हमले हमेशा बेहतर होते हैं, वे कभी खराब नहीं होते हैं। SHA-256/384/512 वर्तमान में अभी भी अधिकांश उद्देश्यों के लिए सुरक्षित माना जाता है। हालांकि , अगर आप सिर्फ यह देखने में रुचि रखते हैं कि दो गैर-दुर्भावनापूर्ण रूप से तैयार किए गए वैध हैं या नहींफ़ाइलें समान हैं, फिर इनमें से कोई भी पर्याप्त होना चाहिए, क्योंकि इनपुट स्थान पहले से ही पर्याप्त रूप से विवश है कि आप ज्यादातर यादृच्छिक सत्रों में रुचि लेंगे। यदि आपके पास यह मानने का कोई कारण है कि फ़ाइलों को दुर्भावनापूर्ण रूप से तैयार किया गया था, तो आपको कम से कम एक क्रिप्टोग्राफ़िक हैश फ़ंक्शन का उपयोग करने की आवश्यकता है जो वर्तमान में सुरक्षित माना जाता है, जो SHA-256 पर निचला पट्टी डालता है।

पहला प्राइमेज एक इनपुट खोजना है जो एक विशिष्ट आउटपुट हैश मान प्राप्त करता है; दूसरा प्रीइमेज एक इनपुट को खोजने के लिए है जो दूसरे, निर्दिष्ट इनपुट के समान आउटपुट देता है; टकराव दो इनपुटों को खोजने के लिए होता है जो एक ही आउटपुट प्राप्त करते हैं, बिना इस बात के कि क्या है और कभी-कभी बिना इनपुट के क्या संबंध हैं।

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


2
यदि हैश मैच होता है, तो या तो फाइलें एक जानबूझकर टकराव का परिणाम होती हैं, या वे नहीं होती हैं और फिर वे समान होने की गारंटी होती हैं। आकस्मिक टकराव की संभावना विशुद्ध रूप से सैद्धांतिक है। यह कहते हुए कि "यदि हैश मैच होता है, तो वे समान दिखने की संभावना रखते हैं" भ्रामक है: यदि द्वेष है और यह टकराव की स्थिति है, तो वे समान होने की संभावना नहीं है, और अन्यथा संभावना प्रभावी रूप से शून्य है, यह नहीं है 'कुछ कम संभावना वाली घटना जिसके खिलाफ बचाव की जरूरत है।
गाइल्स का SO- बुराई पर रोक '21

9
@ गिल्स: इसके विपरीत। माइकल का शब्द बिलकुल सही है, और "गारंटी" भ्रामक है (या, ठीक है, तथ्यात्मक रूप से गलत है)। समान हैश के साथ दो फ़ाइलों की संभावना मेल नहीं खाती (दुर्भावनापूर्ण संशोधन के बावजूद) बहुत कम है, और अभ्यास में उपेक्षित किया जा सकता है। हालांकि, यह शून्य नहीं है । आम तौर पर एक मौका है, जो भी कारण के लिए अलग-अलग इनपुट एक ही हैश का उत्पादन करेंगे , और संभवतः 2 ^ -128 से अधिक होने की संभावना के साथ भी (क्रिप्टोग्राफ़िक एल्गोरिदम काली कला हैं, अल्गॉर्टिह्म एक सूक्ष्म, अज्ञात तरीके से त्रुटिपूर्ण हो सकता है और हमारे पास 100% सुनिश्चित होने का कोई रास्ता नहीं है)।
डेमन

5
@Gilles " प्रभावी रूप से शून्य " अभी भी शून्य नहीं है , जिसका मतलब है कि अभी भी कुछ ((छोटे रूप में छोटे) संभावना है कि डेटा के दो अलग-अलग सेटों में एक ही हैश होगा। आप उस के खिलाफ बहस नहीं कर सकते।
Attie

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

3
@ गलत है। आप एक सांस में मुझे यह नहीं बता सकते हैं कि एक मौका है, हालांकि छोटे आप इसे रेट करते हैं, कि एक आकस्मिक टकराव हो सकता है तो अगले अगले अनुदान में कोई टक्कर नहीं हो सकती है। यह कहना कि अत्यधिक भ्रामक है क्योंकि यह हैशिंग एल्गोरिथ्म की एक संपत्ति का अर्थ है जो पहले से ही पूरी तरह से गलत माना जाता है।
इहानी

10

यह एक संभावना खेल है ... हैश मानों की एक सीमित संख्या का प्रतिनिधित्व करने में सक्षम हैं।

यदि हम एक काल्पनिक (और बहुत कमजोर) 8-बिट हैशिंग एल्गोरिथ्म पर विचार करते हैं, तो यह 256 अलग-अलग मूल्यों का प्रतिनिधित्व कर सकता है। जैसे-जैसे आप अल्गोरिथम के माध्यम से फाइलें चलाना शुरू करेंगे, आपको हैश आउट होना शुरू हो जाएगा ... लेकिन इससे पहले कि आप " हैश कोल " देखना शुरू कर दें । इसका मतलब है कि एल्गोरिथ्म में दो अलग-अलग फ़ाइलों को खिलाया गया था, और इसके आउटपुट के समान हैश मूल्य का उत्पादन किया गया था। स्पष्ट रूप से यहाँ, हैश पर्याप्त मजबूत नहीं है, और हम यह दावा नहीं कर सकते हैं कि " मेल खाने वाले हैश की फ़ाइलों में समान सामग्री है "।

हैश के आकार का विस्तार, और मजबूत क्रिप्टोग्राफिक हैशिंग एल्गोरिदम का उपयोग करने से टकराव को कम करने में मदद मिल सकती है, और हमारा विश्वास बढ़ा सकता है कि एक ही हैश वाली दो फ़ाइलों में समान सामग्री है।

इसने कहा, हम कभी भी 100% निश्चितता तक नहीं पहुँच सकते हैं - हम कभी भी यह सुनिश्चित करने के लिए दावा नहीं कर सकते हैं कि एक ही हैश वाली दो फ़ाइलों में वास्तव में समान सामग्री है।

अधिकांश / कई स्थितियों में यह ठीक है, और हैश की तुलना करना " काफी अच्छा " है, लेकिन यह आपके खतरे के मॉडल पर निर्भर करता है।

अंत में, यदि आपको निश्चित स्तर बढ़ाने की आवश्यकता है, तो मैं आपको सलाह दूंगा कि आप निम्नलिखित कार्य करें:

  1. मजबूत हैशिंग एल्गोरिदम का उपयोग करें ( एमडी 5 को अब पर्याप्त नहीं माना जाता है यदि आपको संभावित दुर्भावनापूर्ण उपयोगकर्ताओं से बचाने की आवश्यकता है:
  2. कई हैशिंग एल्गोरिदम का उपयोग करें
  3. फ़ाइलों के आकार की तुलना करें - एक अतिरिक्त डेटा बिंदु संभावित टकरावों की पहचान करने में मदद कर सकता है, लेकिन ध्यान दें कि प्रदर्शित एमडी 5 टक्कर को डेटा की लंबाई को बदलने की आवश्यकता नहीं थी।

यदि आपको 100% सुनिश्चित करने की आवश्यकता है, तो हर तरह से एक हैश के साथ शुरू करें, लेकिन यदि हैश मैच होता है, तो दो फ़ाइलों की बाइट-बाइट तुलना के साथ इसका पालन करें।


इसके अतिरिक्त, जैसा कि दूसरों द्वारा बताया गया है ... वर्ड और एक्सेल जैसे अनुप्रयोगों द्वारा निर्मित दस्तावेजों की जटिलता का मतलब है कि पाठ, संख्याएं, दृश्यमान लेआउट समान हो सकते हैं, लेकिन फ़ाइल में संग्रहीत डेटा भिन्न हो सकते हैं।

एक्सेल इस पर विशेष रूप से खराब है - बस एक स्प्रेडशीट को खोलकर इसे सहेजने ( कुछ भी नहीं करने ) से अलग सामग्री के साथ एक नई फ़ाइल का उत्पादन किया जा सकता है।


6
MD5 अब पर्याप्त नहीं माना जाता है क्रिप्टोग्राफिक रूप से बहुत सच है, लेकिन विशिष्टता की जाँच के लिए (दुर्भावना के अभाव में, उदाहरण के लिए, यदि आप इनपुट को नियंत्रित करते हैं) यह अच्छा है और तेज़ (और 128 बिट्स बहुत होना चाहिए)
क्रिस एच

4
" दो फ़ाइलों की बाइट-बाइट तुलना के साथ इसका पालन करें। " यदि आप एक फ़ाइल-तुलना करने जा रहे हैं, तो आप इसे पहले भी कर सकते हैं ... उनकी गणना करने के लिए प्रत्येक फ़ाइल के सभी बिंदुओं को पढ़ने का कोई मतलब नहीं है उनकी तुलना करने के लिए दोनों फ़ाइलों को फिर से पढ़ने के लिए केवल हैश!
ट्रिपहाउंड

3
@TripeHound यह निर्भर करता है कि फाइलें दोनों स्थानीय हैं या नहीं ... यदि आपके पास पहले से ही एक हैश है और सिस्टम में एक नई फाइल शुरू कर रहा है, अगर नई फाइल को डेटाबेस में किसी भी तरह हैश की जरूरत है, आदि ... वह कॉल करें जो आपकी स्थिति के अनुकूल हो।
Attie

5
नहीं, यह एक संभावना खेल नहीं है। आप गलत अनुमान लगा रहे हैं कि आकस्मिक टक्कर की संभावना कितनी कम है। यह अभी नहीं होगा। तुलना के दौरान थोड़ा फ़्लिप करने की संभावना अधिक है। दूसरी ओर, कुछ परिदृश्यों में, एक जानबूझकर टक्कर हो सकती है, और यह एक संभावना खेल नहीं है।
गिल्स एसओ- बुराई को रोकें '21

3
@mbrig: 32-बिट हैश में आकस्मिक बेमेल का एक महत्वपूर्ण जोखिम होगा। 128 या 256 बिट्स पर जाना, हालांकि, एक बड़ा अंतर बनाता है । 128 बिट्स के साथ, एक बिलियन बंदरों में से प्रत्येक एक बिलियन शालीनता से रैंडम आकार के दस्तावेजों को एक ही हैश के साथ दो दस्तावेज़ बनाने का लगभग 0.3% मौका होगा। 256 बिट्स के साथ, भले ही बिलियन बंदर एक अरब वर्षों के लिए प्रति सेकंड एक अरब शालीनतापूर्वक रैंडम दस्तावेज़ टाइप कर सकते हों, संयोगवश मेल करने वाले हैश वैल्यू वाले दस्तावेज़ों में से किसी भी गैर-मौजूदगी की संभावना गायब हो जाएगी।
सुपरकाट

6

यदि दो फ़ाइलों में समान MD5 हैश है, और वे दोनों विशेष रूप से तैयार नहीं किए गए हैं, तो वे समान हैं। एक ही MD5 हैश के साथ फ़ाइलों को शिल्प करना कितना कठिन है, यह फ़ाइल प्रारूप पर निर्भर करता है, मुझे नहीं पता कि यह एक्सेल फ़ाइलों के साथ कितना आसान है।

इसलिए यदि आपके पास अपनी खुद की फाइलें हैं जो सिर्फ आसपास ही पड़ी हैं और डुप्लिकेट ढूंढना चाहते हैं, तो एमडी 5 सुरक्षित है। यदि आपने एक फ़ाइल लिखी है, और दूसरी फ़ाइल संदिग्ध है, MD5 अभी भी सुरक्षित है (एक ही MD5 चेकसम के साथ विभिन्न फ़ाइलों को प्राप्त करने का एकमात्र तरीका दोनों फ़ाइलों को शिल्प करना है)। यदि आप जिस पर भरोसा नहीं करते हैं वह आपको एक बजट प्रस्ताव भेजता है, और बाद में एक और फाइल भेजता है जो वे दावा करते हैं कि एक ही है, तो एमडी 5 पर्याप्त नहीं हो सकता है।

किसी भी जोखिम से बचने के लिए, MD5 के बजाय SHA-256 या SHA-512 का उपयोग करें। यदि दो फ़ाइलों में समान SHA-256 हैश है, तो वे समान हैं। वही SHA-512 के लिए जाता है। (एक सैद्धांतिक संभावना है कि वे अलग-अलग हो सकते हैं, लेकिन गलती से ऐसा होने की संभावना आपके कंप्यूटर की संभावना से बहुत कम है, सत्यापन के दौरान थोड़ा सा फ़्लिप करने की तुलना में यह प्रासंगिक नहीं है। जैसा कि किसी ने जानबूझकर दो फ़ाइलों के साथ क्राफ्टिंग की है। वही हैश, कोई भी SHA-256 या SHA-512 के लिए यह करना नहीं जानता है।)

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

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


यदि दो फ़ाइलों में समान MD5 हैश है, और वे दोनों विशेष रूप से तैयार नहीं किए गए हैं, तो वे समान हैं। यह गलत है। संभावित संदेशों की एक अनंतता है, फिर भी केवल 2 ^ 64 संभावित 64-बिट हैश हैं। इसे "कबूतर सिद्धांत" कहा जाता है : "कबूतर सिद्धांत में कहा गया है कि यदि nवस्तुओं को mकंटेनरों में डाला जाता है n > m, तो कम से कम एक कंटेनर में एक से अधिक आइटम होने चाहिए।" यदि आप 2 से अधिक ^ 64 संदेश बनाते हैं, तो आपके पास बिना किसी "विशेष क्राफ्टिंग" के टकराव होंगे। और आप सिर्फ 2. के साथ हो सकते हैं
एंड्रयू हेनले

@AndrewHenle, MD5 64 बिट्स नहीं है, यह 128 है। यदि आकस्मिक टकराव उत्पन्न होता है, तो हमें गर्मी-मृत्यु-के-ब्रह्मांड के समय में हो जाता है, यह केवल एक अत्यंत शैक्षणिक (इसलिए बेकार) परिभाषा के लिए "संभव" है।
चार्ल्स डफी

@CharlesDuffy आप मान रहे हैं कि हैश बेतरतीब ढंग से वितरित है। यह।
एंड्रयू हेनले

प्रभावी रूप से यादृच्छिक वितरण के बराबर होना एक अच्छी क्रिप्टोग्राफिक हैश का गठन करने की परिभाषा का हिस्सा है - आपके पास एक कारण के लिए मिश्रण के बहुत सारे दौर हैं। निश्चित रूप से, कमजोर हैश एल्गोरिदम हैं, लेकिन उन कमजोरियों पर ध्यान केंद्रित करना हमें जानबूझकर हमलों के आसपास पहले से बताए गए कैविट्स में मिलता है। (या आप कह रहे हैं कि एमडी 5 को केवल 64 बिट्स दिखाया गया है जो प्रभावी रूप से यादृच्छिक हैं? मैं मानता हूं कि मैं नहीं रख रहा हूं, इसलिए यह प्रशंसनीय है - लिंक कृपया?)
चार्ल्स डफी

@AndrewHenle मैं यह नहीं कहता कि टकराव गणितीय रूप से असंभव है, जो गलत होगा, लेकिन यहाँ प्रासंगिक नहीं है। मैं बताता हूं कि ऐसा नहीं हुआ है, जो सच है। आपकी टिप्पणी एक तरह से गलत है जो सौदे को पूरी तरह से बदल देती है। 2 ^ 128 संभव MD5 हैश हैं, 2 ^ 64 नहीं। इसका मतलब है कि आपको टक्कर उत्पन्न करने के लिए 2 ^ 128 हैश उत्पन्न करना होगा। असल में, जन्मदिन के विरोधाभास से, 2 ^ 64 आपको उत्पन्न होने वाले हैश के बीच टकराव का एक मैक्रोस्कोपिक मौका देगा (पहले से निर्मित हैश के साथ नहीं)। लेकिन जब से हम जानते हैं कि शिल्प टकराव कैसे होता है, यह गलत है।
गिल्स एसओ- बुराई को रोकना '27

6

संक्षिप्त उत्तर: एक क्रिप्टोग्राफ़िक हैश आपको यथोचित रूप से आश्वस्त करने में मदद करने वाला है कि मैचिंग हैश वाली फाइलें समान हैं। जब तक जानबूझकर गढ़ा नहीं जाता, तब तक समान हैश मूल्यों वाली दो थोड़ी अलग फाइलों की संभावना हास्यास्पद रूप से छोटी होती है। लेकिन जब फाइलों की तुलना और सत्यापन करने की बात आती है, तो जानबूझकर छेड़छाड़ की जा सकती है, एमडी 5 खराब विकल्प है। (SHA3 या BLAKE2 जैसे किसी अन्य हैश फ़ंक्शन का उपयोग करें।)

दीर्घ उत्तर: एक आदर्श हैश फ़ंक्शन वह है जो डेटा के प्रत्येक अनूठे टुकड़े के लिए लगभग अद्वितीय क्रिप्टोग्राफ़िक हैश बनाता है। दूसरे शब्दों में, हम निश्चित रूप से जानते हैं कि इस ब्रह्मांड में दो फाइलें हैं जिनके हैश मूल्य टकराते हैं, इन दो फाइलों के स्वाभाविक रूप से एक साथ आने की संभावना हास्यास्पद रूप से छोटी है।

दस साल पहले, मैंने फैसला किया कि मुझे एमडी 5 से जितना हो सके उतना दूर रहना चाहिए। (बेशक, कल तक, मुझे ऐसा करने का गलत कारण याद था; दस साल का लंबा समय है, आप देखिए। मैंने यह याद रखने के लिए अपने पिछले ज्ञापन पर दोबारा गौर किया कि यह उत्तर क्यों और संपादित किया गया है।) आप देखें, 1996 में, एमडी 5 को मिला था। टकराव के हमलों के लिए अतिसंवेदनशील हो। 9 साल बाद, शोधकर्ताओं ने एक ही हैश के साथ पोस्टस्क्रिप्ट दस्तावेजों और (ouch!) X.509 प्रमाणपत्रों के जोड़े बनाने में सक्षम थे! एमडी 5 स्पष्ट रूप से टूट गया था। (Megaupload.com एमडी 5 का उपयोग भी कर रहा था, और हैश टक्करों के आसपास बहुत सारे हंकी-पक्की थी जिसने मुझे उस समय परेशानी दी थी।)

इसलिए, मैंने निष्कर्ष निकाला कि जब एमडी 5 सौम्य फाइलों की तुलना करने के लिए (और अभी भी) विश्वसनीय था, तो एक को इसका पूरी तरह से उपयोग करना बंद कर देना चाहिए। मैंने तर्क दिया कि इस पर निर्भर होने से भोग और झूठे आत्मविश्वास में बदलने का जोखिम है: एक बार जब आप एमडी 5 हैश का उपयोग करके फ़ाइलों की तुलना करना शुरू कर देते हैं, तो एक दिन आप सुरक्षा फ़र्क को भूल जाते हैं और दो फाइलों की तुलना करते हैं जिन्हें जानबूझकर एक ही एचएच बनाया जाता है। इसके अलावा, सीपीयू और क्रिप्टोप्रोसेसर इसके लिए समर्थन जोड़ने की संभावना नहीं थे।

मूल पोस्टर, हालांकि, एमडी 5 का उपयोग करने के लिए और भी कम कारण हैं, क्योंकि:

  1. जब तक कोई केवल दो फाइलों की तुलना कर रहा है, तब तक बाइट के लिए बाइट तुलना वास्तव में किसी के एमडी 5 हैश पैदा करने से तेज है। तीन या अधिक फ़ाइलों की तुलना करने के लिए ... ठीक है, अब आपके पास एक वैध कारण है।
  2. ओपी ने "समीक्षा करने के तरीके और प्लगइन्स का एक गुच्छा स्थापित किए बिना" निर्दिष्ट किया। Windows PowerShell का Get-FileHash कमांड SHA1, SHA256, SHA384, SHA512 और MD5 हैश जनरेट कर सकता है। SHA हैश फ़ंक्शंस के लिए हार्डवेयर समर्थन वाले आधुनिक कंप्यूटरों पर, उन्हें उत्पन्न करना तेज है।

6
आप अपने द्वारा चुने गए किसी भी लम्बाई के अपने क्रिप्टोग्राफ़िक हैश फ़ंक्शन को बना सकते हैं, सच; लेकिन तब इसकी एक निश्चित लंबाई होती है और कबूतर का सिद्धांत वैसे भी लागू होता है। सामान्य उत्तर है: "केवल उनके हैश की तुलना करके, आप सुनिश्चित नहीं कर सकते कि दो फाइलें समान हैं"।
कामिल मैकियोरोस्की

2
@KamilMaciorowski सिद्धांत रूप में, हाँ मैं कर सकता हूँ। मेरा कस्टम बनाया गया हैश फ़ंक्शन केवल सबसे बड़ी फ़ाइल की एक प्रति उत्पन्न कर सकता है। लेकिन आगे इस पर चर्चा करने में मेरी कोई दिलचस्पी नहीं है; सच्चाई यह है कि, आप एक कारण के लिए नीचा दिखाते हैं कि सिर्फ आपको साबित करने के लिए नाइटपार्टिंग करने की मात्रा अधिक है और यह आप पर पीछे है। अब आप वोट वापस नहीं ले सकते।

मैं @KamilMaciorowski से सहमत हूं ... यह एक संभावना खेल है ... एक एकल हैश का उपयोग करके, आप " उचित रूप से आश्वस्त " हो सकते हैं कि मिलान वाले हैश वाली फाइलें समान हैं, लेकिन 100% गारंटी नहीं है। बेहतर एल्गोरिदम का उपयोग करना, या कई एल्गोरिदम का उपयोग करना आपके आत्मविश्वास में सुधार कर सकता है - यहां तक ​​कि फ़ाइल के आकार की तुलना करने में मदद मिल सकती है ... लेकिन बाइट के लिए बाइट की जांच के बिना आप कभी भी 100% आश्वस्त नहीं हो सकते।
Attie

1
@Attie हुह! यही मैं मूल रूप से मतलब था। धन्यवाद। 🙏 केवल मैं "आप उचित रूप से आश्वस्त हो सकते हैं" जैसे ठाठ वाक्यांशों से परिचित नहीं हैं। माफ़ करना। 😜 फिर भी, इसलिए हमारे पास एक संपादन बटन है। मैं व्यक्तिगत रूप से एक अच्छे उत्तर को कभी नहीं रद्दी करूंगा क्योंकि इसमें एक शब्द गलत है। मैं इसे संपादित करता हूं।

1
"एक अच्छे जवाब को रौंदने" के बारे में: कृपया ध्यान दें कि मैंने पहले यह सुनिश्चित किया है कि यह एक टाइपो नहीं है और आप वास्तव में इसका मतलब है; तब अपमानित किया गया और उसी समय मैंने आपको प्रतिक्रिया दी, एक कारण में मेरे उत्तर का खुलासा किया कि आपका उत्तर बेहतर होगा। यह किया है, तो मेरे downvote नहीं है। मूल रूप से मैंने आपको बताया कि मुझे क्या लगता है कि आपके उत्तर में गलत था, अटी ने स्पष्ट करने में मदद की, आपने उत्तर में सुधार किया। मेरे दृष्टिकोण से हम सभी ने इस स्थिति को ठीक से संभाला है और पूरी कहानी बहुत अच्छी तरह से निकली है। धन्यवाद।
कामिल मैकियोरोस्की

5

मेरे पास 2 एक्सेल दस्तावेज़ हैं और मैं जांचना चाहता हूं कि क्या वे फ़ाइल नाम के अलावा बिल्कुल समान हैं।

व्यावहारिक दृष्टिकोण से, फ़ाइलों की तुलना करने के लिए सीधे यह पता लगाना कि क्या वे अलग हैं, प्रत्येक फ़ाइल के लिए हैश की गणना करने से अधिक तेज़ होंगे और फिर उस हैश की तुलना करेंगे।

हैश की गणना करने के लिए आपको दोनों फाइलों की सामग्री की संपूर्णता को पढ़ना होगा।

यह निर्धारित करने के लिए कि क्या वे प्रत्यक्ष तुलना के माध्यम से समान हैं, आपको केवल दोनों फ़ाइलों की सामग्री को पढ़ने की आवश्यकता है जब तक कि वे मेल नहीं खाते। एक बार जब आप एक अंतर पाते हैं, तो आप जानते हैं कि फाइलें समान नहीं हैं और आपको किसी भी फ़ाइल से अधिक डेटा पढ़ने की आवश्यकता नहीं है।

और इससे पहले कि आप या तो करते हैं, आप बस दो फाइलों के आकार की तुलना कर सकते हैं। यदि आकार भिन्न होते हैं तो सामग्री समान नहीं हो सकती है।


एक भौतिक ड्राइव पर दो फ़ाइलों का उपयोग करते समय, एक हैश फ़ंक्शन का उपयोग करके जो प्रत्येक फ़ाइल पर I / O गति को अलग-अलग रख सकता है, फ़ाइलों की तुलना करने से थोड़ा तेज़ हो सकता है, क्योंकि दो फ़ाइलों को पढ़ने के बीच स्विच करने की कोई आवश्यकता नहीं होगी। हालांकि, हैश वास्तव में चमकता है, हालांकि, कई फ़ाइलों को शामिल करने की कोशिश कर रहा है जो स्मृति में फिट होने के लिए बहुत बड़ी हैं। यहां तक ​​कि अगर आप केवल यह पता लगाना चाहते हैं कि क्या वे सभी मेल खाते हैं, तो फ़ाइल 1 से फ़ाइल 2 की तुलना करें, फिर फ़ाइल 1 से फ़ाइल 3 तक, फिर फ़ाइल 1 से फ़ाइल 4 तक, आदि उनके सभी हैश की गणना करने में लगभग दोगुनी हो सकती है।
सुपरकैट

@ supercat यदि फ़ाइलों को MB या तो बड़े हिस्से में पढ़ा जाता है, तो फ़ाइलों के बीच स्विचिंग ध्यान देने योग्य नहीं होगी। और यदि किसी कार्य प्रवाह में डुप्लिकेट को खोजने के लिए फ़ाइलों के एक समूह की तुलना करना शामिल है, तो हैश की गणना भी की जा सकती है क्योंकि प्रत्येक फ़ाइल को लिखा गया है - ऐसा करने के बाद से बहुत अधिक मुफ्त में किया जा सकता है।
एंड्रयू हेनले

यदि किसी के पास फ़ाइलों के बड़े हिस्से को बफर करने के लिए पर्याप्त स्थान है, तो स्विचिंग समय एक समस्या नहीं है, लेकिन अन्यथा वे हो सकते हैं। जब फ़ाइलें लिखी जाती हैं, तो हैश की गणना करने के लिए, यह ठीक हो सकता है यदि कोई गारंटी दे सकता है कि फ़ाइलों को परिवर्तित किए बिना या कम से कम संग्रहित हैश को अमान्य नहीं किया जा सकता है। यदि कोई अनावश्यक रूप से फ़ाइलों का बैकअप लेने से बचने की कोशिश कर रहा है, तो केवल संग्रहीत हैश मानों को देखने से कोई गलती से दूषित फ़ाइल का बैकअप ले सकता है, लेकिन गैर-दूषित फ़ाइलों का बैकअप लेने के लिए परेशान न हो, जो दूषित फ़ाइल से मेल खाना चाहिए, लेकिन नहीं
सुपरकैट

"एक बार जब आप अंतर पाते हैं, तो आप जानते हैं कि फाइलें समान नहीं हैं" - जरूरी नहीं। XLSX फाइलें ज़िप फाइलें हैं जो संभावित रूप से अलग-अलग क्रम में सामग्री को संग्रहीत कर सकती हैं फिर भी एक ही सामग्री को रोक सकती हैं। लेकिन यहां तक ​​कि अगर आप उन्हें विघटित करते हैं और प्रत्येक व्यक्तिगत फ़ाइल की तुलना करते हैं, तो XLSX फ़ाइल में XML दस्तावेज़ होते हैं जो सामग्री को प्रभावित किए बिना उदाहरण के लिए अलग-अलग लाइन अंत हो सकते हैं।
थॉमस वेलर

5

एमडी 5 या एसएचए जैसे हैशिंग की लंबाई निर्धारित है, यह 300 अल्फ़ान्यूमेरिक वर्ण कहता है (वास्तव में वे छोटे हैं और अल्फ़ान्यूमेरिक वर्णों के पूरे सेट का उपयोग नहीं करते हैं)।

कहते हैं कि फाइलें अल्फ़ान्यूमेरिक वर्णों और आकार में 2GB तक की होती हैं।

आप आसानी से देख सकते हैं कि संभावित हैश मानों की तुलना में अधिक फाइलें (2GB तक के आकार के साथ) हैं। कबूतर के सिद्धांत का कहना है कि कुछ (अलग-अलग) फाइलों में समान हैश मान होना चाहिए।

इसके अलावा, जैसा कि shattered.io 1 पर दिखाया गया है, आपके पास दो अलग-अलग फाइलें हो सकती हैं: shattered.io/static/shattered-1.pdf और shattered.io/static/shattered-2.pdf जिसमें समान SHA-1 हैश मान दिया जा रहा है पूरी तरह से अलग।

1 SHA1 md5 की तुलना में "मजबूत" हैशिंग एल्गोरिथ्म है


आकस्मिक टकराव की संभावना को ध्यान में रखना बहुत कम है। एक जानबूझकर टकराव का जोखिम एमडी 5 के लिए भी मौजूद है और एसएचए -1 से भी बदतर है जो यहां बहुत प्रासंगिक नहीं है।
गिल्स एसओ- बुराई को रोकें '21

4

नहीं। विभिन्न मानों की गारंटी है कि फाइलें अलग हैं। समान मानों की गारंटी नहीं है कि फाइलें समान हैं। CRC16 का उपयोग करके उदाहरण ढूंढना अपेक्षाकृत आसान है।

समकालीन हैशिंग योजनाओं के साथ संभाव्यता के संतुलन पर वे समान हैं।


1
सवाल एमडी 5 के बारे में है, जिसमें आकस्मिक टकराव का कोई जोखिम नहीं है। इसमें जानबूझकर टकराव का जोखिम होता है, लेकिन यह संभावनाओं का मामला नहीं है।
गाइल्स का SO- बुराई पर रोक '21

1
यह विभिन्न नामों के साथ एक्सेल स्प्रेडशीट के बारे में भी है, वे कितने बड़े हो सकते हैं कि बाइट की तुलना के लिए एक बाइट एक विकल्प नहीं हो सकता है? एक साथ दो हैशिंग योजनाएं निश्चितता प्रदान करती हैं।
mckenzm

2
@ गिल्स सभी हैशकोड में आकस्मिक टकराव का जोखिम होता है, परिभाषा के अनुसार। इसका एकमात्र तरीका है संपूर्ण फ़ाइल को हैशकोड के रूप में उपयोग करना। आपकी टिप्पणी का कोई मतलब नहीं है।
user207421

3

आपका प्रश्न पीछे की ओर है, हालाँकि - मान लेते हैं कि हैश का अर्थ है कि उनके पास एक ही डेटा है (जो कि 100% गारंटी नहीं है, लेकिन हर सेकंड फ़ाइलों की तुलना करने के लिए जीवन भर के लिए काफी अच्छा है, टक्कर नहीं मारना)। यह जरूरी नहीं है कि एक ही डेटा होने का मतलब है कि उनके पास एक ही हैश होगा। तो नहीं - आप फ़ाइल को हैशिंग द्वारा किसी अन्य एक्सेल फ़ाइल में डेटा के साथ एक्सेल फ़ाइल में डेटा की तुलना नहीं कर सकते क्योंकि बहुत सारे तरीके हैं कि अंतर्निहित डेटा के बिना दो फाइलें अलग हो सकती हैं। एक स्पष्ट तरीका - डेटा को एक्सएमएल के रूप में संग्रहीत किया जाता है, प्रत्येक सेल का अपना एक्सएमएल नोड होता है। यदि उन नोड्स को अलग-अलग ऑर्डर में संग्रहीत किया जाता है तो डेटा समान है लेकिन फ़ाइल अलग है।



2

इस ओपी के लिए जवाब दिया गया है लेकिन एक सारांश से लाभ हो सकता है।

यदि आप यह जांचना चाहते हैं कि क्या दो फाइलें समान हैं, तो बहुत कुछ इस बात पर निर्भर करता है कि फाइलें और हैश आपके नियंत्रण में हैं या नहीं।

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

यह वह परिदृश्य है जो आपके पास होता है, जब आप जल्दी से जांचना चाहते हैं कि क्या आपके पीसी या फ़ाइल सर्वर पर दो निर्देशिकाओं में एक ही सामग्री है, यदि किसी निर्देशिका में कोई भी फ़ाइल सटीक डुप्लिकेट आदि हैं, और आपको पूरा यकीन है कि फाइलें नहीं हैं इंजीनियर / अवैध रूप से संशोधित किया गया है, और आप सही परिणाम देने के लिए अपने हैशिंग ऐप / उपयोगिता पर भरोसा करते हैं।

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


2

विंडोज कमांड लाइन पर, आप यह compनिर्धारित करने के लिए उपयोगिता का उपयोग कर सकते हैं कि क्या दो फाइलें बिल्कुल समान हैं। उदाहरण के लिए:

comp fileone.xls filetwo.xls

1

जब हैश समान होते हैं, तो क्या इसका मतलब यह है कि फ़ाइल सामग्री 1: 1 समान है?

नहीं, यदि हैश अलग हैं, तो इसका मतलब है कि सामग्री अलग हैं। समान हैशकोड समान सामग्री का मतलब नहीं है। एक हैशकोड एक बड़े डोमेन की एक छोटी सी सीमा में कमी है, परिभाषा के अनुसार: इसका मतलब यह है कि असमान सामग्री से अधिक हैकोड्स समान हो सकते हैं। अन्यथा उन्हें कंप्यूटिंग करने का कोई मतलब नहीं होगा।


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

"यदि हैश अलग हैं, तो इसका मतलब है कि सामग्री अलग हैं।" जरुरी नहीं। XLSX फाइलें ज़िप फाइलें हैं और अलग-अलग फ़ाइल ऑर्डर में एक ही सामग्री संग्रहीत करना संभव होगा।
थॉमस वेलर

1

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


जब आप कोई हैश फ़ंक्शन चुनते हैं और उससे चिपक जाते हैं, तो ये विचार करने के लिए सभी संयोजन हैं:

          |    identical   |   different    |
          |   hash values  |  hash values   |
----------+----------------+----------------+
identical |   can happen,  | cannot happen, |
  files   |     common     |   impossible   |
----------+----------------+----------------+
different |   can happen,  |   can happen,  |
  files   |      rare*     |     common     |
----------+----------------+----------------+

* rare, unless whoever generates (at least one of) the files
  purposely aims at this scenario

परिदृश्य जिसमें समान फ़ाइल अलग-अलग हैश मान उत्पन्न करते हैं वह एकमात्र ऐसा है जो कड़ाई से असंभव है।


दो तर्क जो हमेशा लागू होते हैं:

  • यदि फ़ाइलें समान हैं, तो हैश मान सुनिश्चित करने के लिए समान हैं ।
  • यदि हैश मान भिन्न हैं, तो फ़ाइलें सुनिश्चित करने के लिए अलग हैं ।

दो कारण जो सख्त नहीं हैं :

  • यदि फाइलें अलग हैं तो हैश मान शायद अलग हैं।
  • यदि हैश मान समान हैं तो फाइलें संभवतः समान हैं।

0

आपके उद्देश्यों के लिए, हाँ, समान हैश का मतलब समान फ़ाइलों से है।

जैसा कि अन्य उत्तर स्पष्ट करते हैं, 2 अलग-अलग फ़ाइलों का निर्माण करना संभव है, जिसके परिणामस्वरूप समान हैश और एमडी 5 इस संबंध में विशेष रूप से मजबूत नहीं हैं।

यदि आप बड़ी संख्या में एक्सेल दस्तावेजों की तुलना करते हैं या यदि आपको लगता है कि कोई व्यक्ति तुलना में हेरफेर करना चाहता है, तो एक मजबूत हैशिंग एल्गोरिथ्म का उपयोग करें। SHA1 MD5 से बेहतर है। SHA256 फिर से बेहतर है और आपको अपने विशेष उपयोग के लिए पूरा भरोसा देना चाहिए।


-1

फ़ाइलें शायद समान हैं अगर उनके हैश समान हैं। आप दोनों फ़ाइलों को एक समान तरीके से संशोधित करके आत्मविश्वास बढ़ा सकते हैं (उदाहरण के लिए समान अप्रयुक्त सेल में समान मूल्य) फिर संशोधित फ़ाइलों के हैश की तुलना करें। यह एक फाइल के लिए एक जानबूझकर टकराव पैदा करना मुश्किल है जिसे पहले से ज्ञात नहीं तरीके से बदल दिया जाता है।


यह कार्यालय फ़ाइलों में संग्रहीत अतिरिक्त डेटा के कारण काम नहीं करेगा। उदाहरण के लिए, सहेजने से पहले आपको कर्सर को उसी सेल में रखना होगा, सटीक समय पर सहेजना आदि। लेकिन फिर भी, XLSX फाइलें आंतरिक रूप से ज़िप फाइलें होती हैं, इसलिए यदि एल्गोरिथ्म अलग-अलग फाइलों को एक अलग क्रम में संग्रहीत करता है (जो भी उद्देश्य के लिए), फ़ाइल समान है लेकिन हैश नहीं है
थॉमस वेलर

-2

आइए इसे व्यावहारिक रूप से देखें। "हैश समान हैं" कहने के बजाय, "मैं कहूंगा" मैंने एक कंप्यूटर प्रोग्राम लिखा था जो दो फ़ाइलों के हैश की गणना करता है और प्रिंट करता है कि क्या वे समान हैं या नहीं ", और मैं दो फ़ाइलों के साथ प्रोग्राम चलाता हूं, और यह कहता है "समान"। ऐसा करने के कई कारण हो सकते हैं:

फ़ाइलें समान हो सकती हैं। मेरे कोड में बग हो सकते हैं (एक जो वास्तव में अभ्यास में हुआ है, दो लॉन्ग (256 बाइट) हैश की तुलना मेम्कैंप से नहीं, बल्कि स्ट्रैम्प से कर रहा है: यदि "हैश" की तुलना में प्रत्येक हैश में पहला बाइट शून्य है, और मौका होगा यह 65536 में 1 है। इसमें हार्डवेयर की खराबी हो सकती है (ब्रह्मांडीय किरण किसी मेमोरी सेल से टकराकर उसे स्विच करती है)। या आपके पास समान हैश (हैश टक्कर) वाली दो अलग-अलग फाइलों का दुर्लभ मामला हो सकता है।

मैं कहूंगा कि गैर-समरूप फ़ाइलों के लिए, अब तक सबसे अधिक संभावित कारण प्रोग्रामर त्रुटि है, फिर कॉस्मिक किरण आती है जिसने हैश की "झूठी" से "सच" की तुलना करने के परिणामस्वरूप एक बूलियन चर को बदल दिया, और बहुत बाद में आता है एक हैश टक्कर का संयोग।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.