2012-12-03 16 views
5

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

0709d609d69385255c496436eb50402c 
709465a74411bd596595c7b9b158ae6a 
4ab657320ef33e3d5eb498e4c13d41b7 
3b49c6ab199994fd776bb63761414e72 
0fc28c5a010fc3c06c0c930c88e31a15 
c4ecd214662cac5aae0e53f6f252bf0e 
8b086431e43148a2c2d943ba30d31cc6 

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

+0

यह काम करना चाहिए, बस सुनिश्चित करें कि हैंश का क्रम स्थानीय और रिमोट सिस्टम – Martheen

उत्तर

4

तुम क्यों नहीं है:

  • 7 MD5 हैश उत्पन्न (जो तुम अब क्या कर रहे हैं), और फिर
  • एक बड़ा बाइट सरणी और MD5 हैश में इन 7 हैश आउटपुट कम्बाइन कि एक समग्र हैश का उत्पादन करने के लिए। (प्रत्येक एमडी 5 हैश 16 बाइट्स है, इसलिए आप एक 112 बाइट सरणी के साथ समाप्त हो जाएंगे जो आपको हैश प्राप्त करने के लिए हैश करेगा)।

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

+0

बहुत ही सरल लेकिन महान विचार के लिए धन्यवाद। – user685869

3

आप बस एक साथ जुड़े सभी सात फाइलों की सामग्री के हैश की गणना कर सकते हैं।

हालांकि, मुझे लगता है कि अनुशंसा नहीं करते हैं, क्योंकि आप अपने आप को सूक्ष्म कीड़े को खुल जाएगा, जैसे:

file1: 01 02 03 04 file2: 05 06 07 08 

रूप

file1: 01 02 file2: 03 04 05 06 07 08 

कैसे धीमी गति से अपने संचार कड़ी है एक ही हैश होगा ? एक एमडी 5 हैश 32 बाइट्स है।

उनमें से 7 1/4 केबी से कम है; यह सिर्फ इतना डेटा नहीं है।

लिंक के किन पक्ष पर फ़ाइलों को बदलने जा रहे हैं?

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

+0

के बीच समान है या नहीं, मेरा कॉम लिंक 1200 बीपीएस मॉडेम (इसलिए लगभग 150 बाइट्स/सेकंड) है। यही कारण है कि मैं बहुमत के मामलों में एक एकल एमडी 5 संचारित करने की उम्मीद कर रहा था। :-) – user685869

+1

मुझे 1200 बीपीएस मोडेम याद हैं ;-) हालांकि, यह सात MD5s को स्थानांतरित करने के लिए 2 सेकंड से भी कम है; यदि आप उन्हें संपीड़ित करते हैं तो कम। –

1

XOR उन सभी को।

जैसा कि मुझे पता है कि यह सबसे सरल और प्रभावी समाधान है।

0

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

फिर आप एक हैश बनाने के लिए आगे बढ़ सकते हैं, यदि नहीं, तो पहले स्थान पर हैश उत्पन्न करने से परेशान न करें।

यदि संग्रह विशेषता सेट है, हैश उत्पन्न करें, फ़ाइलों को सिंक करें और संग्रह विशेषता को अन-सेट करें।

यह मेरा सुझाया गया समाधान होगा।

2

एक अन्य विकल्प पहली जगह में एक भी हैश उत्पन्न करने के लिए है - एक फ़ोल्डर में सभी फ़ाइलों को देखने के https://stackoverflow.com/a/15683147/188926

यह उदाहरण दोहराता है, लेकिन आप के बजाय फ़ाइलों की अपनी सूची से अधिक पुनरावृति सकता है।