एमडी 5 एक पुनरावृत्त एल्गोरिदम है। आपको छोटे एमडी 5 के टन की गणना करने की आवश्यकता नहीं है और फिर उन्हें किसी भी तरह गठबंधन करें। आप फ़ाइल के छोटे हिस्सों को पढ़ते हैं और उन्हें पाचन में जोड़ते हैं क्योंकि आप जा रहे हैं, इसलिए आपको पूरी फाइल को स्मृति में कभी भी याद नहीं रखना चाहिए। यहां एक जावा कार्यान्वयन है।
FileInputStream f = new FileInputStream(new File("bigFile.txt"));
MessageDigest digest = MessageDigest.getInstance("md5");
byte[] buffer = new byte[8192];
int len = 0;
while (-1 != (len = f.read(buffer))) {
digest.update(buffer,0,len);
}
byte[] md5hash = digest.digest();
और voila। आपके पास एक ही फाइल में एमडी 5 है, बिना किसी फाइल में पूरी फाइल को कभी भी।
यह ध्यान देने योग्य है कि अगर आप किसी भी कारण से फ़ाइल के उपखंडों के एमडी 5 हैंश के साथ चाहते हैं, तो यह कभी-कभी कम बैंडविड्थ कनेक्शन पर स्थानांतरित होने वाली बड़ी फ़ाइल पर अंतरिम जांच करने के लिए उपयोगी होता है) तो आप कर सकते हैं उन्हें किसी भी समय डाइजेस्ट वस्तु क्लोनिंग द्वारा प्राप्त की तरह तो
byte[] interimHash = ((MessageDigest)digest.clone()).digest();
यह वास्तविक को प्रभावित नहीं करता पचाने वस्तु ताकि आप समग्र MD5 हैश के साथ काम करने के लिए जारी कर सकते हैं।
इसका भी ध्यान देने योग्य है कि MD5 और इस तरह के SHA-1 के रूप में सबसे परिस्थितियों में कुछ बेहतर के साथ प्रतिस्थापित किया जाना चाहिए (जैसे कि एक अविश्वसनीय स्रोत से फ़ाइल प्रामाणिकता की पुष्टि करने के रूप में) क्रिप्टोग्राफिक प्रयोजनों के लिए एक पुरानी हैश है लायक। गैर-क्रिप्टोग्राफिक उद्देश्यों के लिए, जैसे दो विश्वसनीय स्रोतों के बीच फ़ाइल अखंडता की पुष्टि करना, एमडी 5 अभी भी पर्याप्त है।
आप ऐसा क्यों करना चाहते हैं? – AndiDog
फ़ाइलों के लिए MD5 मानों की गणना करने के लिए जो स्मृति – channel72
में फ़िट होने के लिए बहुत बड़े हैं, एमडी 5 में केवल 128-बिट स्थिति है जो गणना के दौरान 512-बिट फ़ाइल खंड को ट्रैक करती है; कौन परवाह करता है कि फ़ाइल कितनी बड़ी है? –