जावा में फ़ाइल का MD5 चेकसम प्राप्त करना


509

मैं एक फ़ाइल के एमडी 5 चेकसम को पाने के लिए जावा का उपयोग करना चाहता हूं। मैं वास्तव में आश्चर्यचकित था लेकिन मुझे ऐसा कुछ भी नहीं मिला जो दिखाता है कि किसी फ़ाइल का एमडी 5 चेकसम कैसे प्राप्त किया जाए।

यह कैसे किया जाता है?


शायद इससे मदद मिलेगी। आप कल्पना भी देख सकते हैं, लेकिन यह जटिल होने के साथ और अधिक कर लेगा।
वेनकोल्विन

4
ध्यान रखें कि हालिया शोध के अनुसार "एमडी 5 को क्रिप्टोग्राफिक रूप से टूटा हुआ और आगे के उपयोग के लिए अनुपयुक्त माना जाना चाहिए"। en.wikipedia.org/wiki/MD5
ज़खारिया स्टेनली

80
MD5 को अब क्रिप्टोग्राफिक रूप से सुरक्षित नहीं माना जाता है, लेकिन यह फ़ाइल संगतता को मान्य करने के लिए अभी भी पर्याप्त है और यह SHA से अधिक तेज़ है।
जिग्गी

2
@ZakhariaStanley यह चेकसमिंग के बारे में एक प्रश्न है।
iPherian

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

जवाबों:


541

एक इनपुट स्ट्रीम डेकोरेटर है, java.security.DigestInputStreamताकि आप डेटा पर एक अतिरिक्त पास बनाने के बजाय, इनपुट स्ट्रीम का उपयोग करते हुए पाचन की गणना कर सकें।

MessageDigest md = MessageDigest.getInstance("MD5");
try (InputStream is = Files.newInputStream(Paths.get("file.txt"));
     DigestInputStream dis = new DigestInputStream(is, md)) 
{
  /* Read decorated stream (dis) to EOF as normal... */
}
byte[] digest = md.digest();

4
मैं सहमत हूँ, यदि आप पहले से ही बाइट्स के साथ कुछ कर रहे हैं (यानी उन्हें एक HTTP कनेक्शन से पढ़कर) तो फ्लाई पर चेकसम की गणना करने का बहुत ही सुंदर तरीका है।
मार्क नोवाकोव्स्की

2
@AlPhaba क्या आपने isएक InputStreamया एक के रूप में घोषित किया FileInputStream? आप की तरह लगता है FileInputStream, जो इस त्रुटि का कारण होगा।
इरिकसन

1
@barwnikk जावा 8 में ठीक काम करता है MethodNotFound। मानक जावा से अपवाद नहीं है; शायद आप एक संकलक त्रुटि के बारे में बात कर रहे हैं? किसी भी मामले में, यदि यह आपके लिए काम नहीं करता है, तो यह एक स्थानीय कॉन्फ़िगरेशन समस्या है, या अन्य कोड की समस्या है।
इरिकसन

4
@barwnikk फिर, वह आपकी स्थानीय कॉन्फ़िगरेशन समस्या है। यह जावा 7 और जावा 8 कोड मान्य है। यदि आप 2006 से उपकरणों के साथ फंस गए हैं, तो आपको अनुकूलन करना होगा।
एरिक्सन

5
@erickson आप फ़ाइल सामग्री के साथ MessageDigest ऑब्जेक्ट को अपडेट नहीं कर रहे हैं। Rt? यह कोड हमेशा एक ही डाइजेस्ट को प्रिंट करेगा।
सुनील

302

Apache Commons Codec लाइब्रेरी से DigestUtils का उपयोग करें :

try (InputStream is = Files.newInputStream(Paths.get("file.zip"))) {
    String md5 = org.apache.commons.codec.digest.DigestUtils.md5Hex(is);
}

1
मेरे एंड्रॉइड कोड में मेरे लिए काम नहीं करता है मुझे यह त्रुटि मिलती है ... java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Hex.encodeHexString at org .apons.commons.codec.digest.DigestUigest.mt5.mex (DigestUtils.java:215)
JPM

@JPM मान लें कि आपने डाउनलोड किया है और commons-codec.jarपहले से ही अपने वर्गपथ पर रखा है ?
लीफ ग्रुएनवोल्ड

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

1
मुझे भी यही समस्या थी, लेकिन यह इस कोड द्वारा तय किया गया था 'FileInputStream fis = new FileInputStream (new File (filePath)); बाइट डेटा [] = org.apache.commons.codec.digest.DigestUtils.md5 (fis); char md5Chars [] = Hex.encodeHex (डेटा); स्ट्रिंग md5 = String.valueOf (md5Chars); `
दिमित्री_जूल

1
अच्छा! नई परियोजनाओं के लिए मैं हमेशा एक नई निर्भरता जोड़ने से पहले दो बार सोचता हूं लेकिन मौजूदा परियोजना के लिए मुझे बस यह जांचना होगा कि क्या पुस्तकालय पहले से ही इसका उपयोग करने के लिए है। +1
OscarRyz

164

मैसेजडिजेस्ट क्लास का उपयोग करने के लिए रियल के जावा-हाउ- पर एक उदाहरण है ।

CRC32 और SHA-1 का उपयोग करके उदाहरणों के लिए उस पृष्ठ को देखें।

import java.io.*;
import java.security.MessageDigest;

public class MD5Checksum {

   public static byte[] createChecksum(String filename) throws Exception {
       InputStream fis =  new FileInputStream(filename);

       byte[] buffer = new byte[1024];
       MessageDigest complete = MessageDigest.getInstance("MD5");
       int numRead;

       do {
           numRead = fis.read(buffer);
           if (numRead > 0) {
               complete.update(buffer, 0, numRead);
           }
       } while (numRead != -1);

       fis.close();
       return complete.digest();
   }

   // see this How-to for a faster way to convert
   // a byte array to a HEX string
   public static String getMD5Checksum(String filename) throws Exception {
       byte[] b = createChecksum(filename);
       String result = "";

       for (int i=0; i < b.length; i++) {
           result += Integer.toString( ( b[i] & 0xff ) + 0x100, 16).substring( 1 );
       }
       return result;
   }

   public static void main(String args[]) {
       try {
           System.out.println(getMD5Checksum("apache-tomcat-5.5.17.exe"));
           // output :
           //  0bb2827c5eacf570b6064e24e0e6653b
           // ref :
           //  http://www.apache.org/dist/
           //          tomcat/tomcat-5/v5.5.17/bin
           //              /apache-tomcat-5.5.17.exe.MD5
           //  0bb2827c5eacf570b6064e24e0e6653b *apache-tomcat-5.5.17.exe
       }
       catch (Exception e) {
           e.printStackTrace();
       }
   }
}

70
हां ... 11 साल बाद भी ऑन-लाइन! :-)
RealHowTo

रियल के जावा-हाउ-टू में उदाहरण पूरी तरह से काम करता है, और लागू करने के लिए सरल था।
बोकारो

रीड लूप थोड़ा अनाड़ी है। read()शून्य नहीं लौटेगा, और do/whileवास्तव में उचित नहीं है।
लोरेन

10
@EJP आपकी समय पर प्रतिक्रिया के लिए धन्यवाद।
छिपकली

बाइट [] बफर = नई बाइट [1024]; क्या हम 1024 से आकार को कुछ और अधिक इष्टतम में बदल सकते हैं?
जलप्रेश

90

Com.google.common.hash एपीआई प्रदान करता है:

  • सभी हैश कार्यों के लिए एक एकीकृत उपयोगकर्ता के अनुकूल एपीआई
  • सीडबल 32- और 128-बिट कार्यान्वयन मरमुर 3
  • md5 (), sha1 (), sha256 (), sha512 () एडेप्टर, इन के बीच स्विच करने के लिए कोड की केवल एक पंक्ति को बदलें, और बड़बड़ाहट।
  • goodFastHash (int बिट्स), जब आप परवाह नहीं करते कि आप किस एल्गोरिथ्म का उपयोग करते हैं
  • HashCode उदाहरणों के लिए सामान्य उपयोगिताओं, जैसे CombOrdered / CombUnordered

उपयोगकर्ता गाइड पढ़ें ( IO समझाया , हैशिंग समझाया )।

आपके उपयोग-मामले के Files.hash()लिए फ़ाइल के लिए डाइजेस्ट वैल्यू की गणना करता है और लौटाता है।

उदाहरण के लिए ए पाचन गणना (MD5 को पाने के लिए SHA-1 को MD5 में बदलें)

HashCode hc = Files.asByteSource(file).hash(Hashing.sha1());
"SHA-1: " + hc.toString();

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

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

ध्यान दें कि दूसरों की तुलना में एक उच्च टक्कर दर है।


ऊपर बताए अनुसार Files.hash का क्या हिस्सा Files.hash को कवर नहीं करता है?
जैतून

2
Files.hash(): के रूप में पदावनत चिह्नित है, सिफारिश तरीका हैFiles.asByteSource(file).hash(Hashing.sha1())
erkfel

1
और जनवरी 2018 तक Hashing.sha1()पदावनत चिह्नित है। इसके Hashing.sha256()बजाय फ़ंक्शन की अनुशंसा की जाती है। स्रोत
मैजिकलीगेंड

58

Nio2 (जावा 7+) और कोई बाहरी लाइब्रेरी का उपयोग करना:

byte[] b = Files.readAllBytes(Paths.get("/path/to/file"));
byte[] hash = MessageDigest.getInstance("MD5").digest(b);

अपेक्षित चेकसम के साथ परिणाम की तुलना करने के लिए:

String expected = "2252290BC44BEAD16AA1BF89948472E8";
String actual = DatatypeConverter.printHexBinary(hash);
System.out.println(expected.equalsIgnoreCase(actual) ? "MATCH" : "NO MATCH");

@ अर्श हां बिल्कुल - धन्यवाद। मैंने JDK फ़ाइलें वर्ग और अमरूद का मिश्रण किया।
अस्वच्छ

मुझे यह समाधान इरिकसन से अधिक पसंद है क्योंकि इसे शुद्ध कार्यात्मक शैली प्रोग्रामिंग का उपयोग करने के लिए वैकल्पिक के साथ लपेटा जा सकता है
गेब्रियल हर्नांडेज़

2
एक बड़ी फाइल के लिए यह बहुत सारी मेमोरी का उपयोग करेगा क्योंकि पूरी फाइल पढ़ी जाती है और फिर उसे पढ़ने के बजाय डाइजेस्ट को खिलाया जाता है और उन्हें पढ़ते हुए "पचा" लिया जाता है।
बर्नरी

39

अमरूद अब एक नया, सुसंगत हैशिंग एपीआई प्रदान करता है जो जेडीके में उपलब्ध विभिन्न हैशिंग एपीआई की तुलना में बहुत अधिक उपयोगकर्ता के अनुकूल है। देखें हैशिंग समझाया । किसी फ़ाइल के लिए, आप MD5 योग, CRC32 (संस्करण 14.0+ के साथ) या कई अन्य हैश आसानी से प्राप्त कर सकते हैं:

HashCode md5 = Files.hash(file, Hashing.md5());
byte[] md5Bytes = md5.asBytes();
String md5Hex = md5.toString();

HashCode crc32 = Files.hash(file, Hashing.crc32());
int crc32Int = crc32.asInt();

// the Checksum API returns a long, but it's padded with 0s for 32-bit CRC
// this is the value you would get if using that API directly
long checksumResult = crc32.padToLong();

32

ठीक है। मुझे जोड़ना था। उन लोगों के लिए एक लाइन कार्यान्वयन जिनके पास पहले से ही स्प्रिंग और अपाचे कॉमन्स निर्भरता है या इसे जोड़ने की योजना है:

DigestUtils.md5DigestAsHex(FileUtils.readFileToByteArray(file))

केवल और अपाचे के लिए केवल विकल्प (क्रेडिट @duleshi):

DigestUtils.md5Hex(FileUtils.readFileToByteArray(file))

आशा है कि यह किसी की मदद करता है।


1
यहDigestUtils.md5Hex(FileUtils.readFileToByteArray(file))
duleshi

डेविड ऑन्टर कॉमन्स आधारित समाधान बेहतर है क्योंकि यह मेमोरी में पूरी फाइल नहीं पढ़ता है।
फ्रैन मारजोआ

कम से कम Spring 5 आपके DigestUtils.md5Digest(InputStream inputStream)लिए एमडी 5 डाइजेस्ट की गणना करना और DigestUtils.md5DigestAsHex(InputStream inputStream)मेमोरी में पूरी फाइल को पढ़े बिना एमडी 5 डाइजेस्ट विधियों के हेक्साडेसिमल स्ट्रिंग प्रतिनिधित्व के लिए है।
माइक शूनु

24

जावा 7 का उपयोग करते हुए बिना किसी तीसरे पक्ष के पुस्तकालयों के साथ एक सरल दृष्टिकोण

String path = "your complete file path";
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(Files.readAllBytes(Paths.get(path)));
byte[] digest = md.digest();

यदि आपको इस बाइट सरणी को प्रिंट करने की आवश्यकता है। नीचे के रूप में उपयोग करें

System.out.println(Arrays.toString(digest));

यदि आपको इस पचाने में हेक्स स्ट्रिंग की आवश्यकता है। नीचे के रूप में उपयोग करें

String digestInHex = DatatypeConverter.printHexBinary(digest).toUpperCase();
System.out.println(digestInHex);

जहाँ DatatypeConverter javax.xml.bind.DatatypeConverter है


क्यों toUpperCase?
एजकैसेबर्ग 13

@edgecaseberg सिर्फ हेक्स स्ट्रिंग के लिए सांत्वना के लिए इसे प्रिंट करते समय अच्छा लगता है
सुनील

मैंने पाया कि मुझे टॉपर कैस () के बजाय टॉलेरकेस () का उपयोग करने की आवश्यकता थी।
शानदार

13

मुझे हाल ही में यह केवल एक गतिशील स्ट्रिंग के लिए करना था, MessageDigestकई तरीकों से हैश का प्रतिनिधित्व कर सकता है। फाइल के हस्ताक्षर प्राप्त करने के लिए जैसे आपको md5sum कमांड मिलेगी, मुझे इस तरह से कुछ करना होगा:

try {
   String s = "TEST STRING";
   MessageDigest md5 = MessageDigest.getInstance("MD5");
   md5.update(s.getBytes(),0,s.length());
   String signature = new BigInteger(1,md5.digest()).toString(16);
   System.out.println("Signature: "+signature);

} catch (final NoSuchAlgorithmException e) {
   e.printStackTrace();
}

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


हस्ताक्षर हेक्साडेसिमल प्रारूप में पाचन है। मुझे भी काम करने के लिए हेक्साडेसिमल प्रतिनिधित्व मिला, जैसा कि आप कहते हैं, अन्य प्रतिनिधित्व काम नहीं करते हैं। इसे डालने के लिए धन्यवाद।
अमित

11
public static void main(String[] args) throws Exception {
    MessageDigest md = MessageDigest.getInstance("MD5");
    FileInputStream fis = new FileInputStream("c:\\apache\\cxf.jar");

    byte[] dataBytes = new byte[1024];

    int nread = 0;
    while ((nread = fis.read(dataBytes)) != -1) {
        md.update(dataBytes, 0, nread);
    };
    byte[] mdbytes = md.digest();
    StringBuffer sb = new StringBuffer();
    for (int i = 0; i < mdbytes.length; i++) {
        sb.append(Integer.toString((mdbytes[i] & 0xff) + 0x100, 16).substring(1));
    }
    System.out.println("Digest(in hex format):: " + sb.toString());
}

या आपको और जानकारी मिल सकती है http://www.asjava.com/core-java/java-md5-example/



9

हम उस कोड का उपयोग कर रहे थे जो ऊपर दिए गए कोड का उपयोग करते हुए पिछले पोस्ट से मिलता जुलता है

...
String signature = new BigInteger(1,md5.digest()).toString(16);
...

हालांकि, BigInteger.toString()यहां उपयोग करने के लिए देखें , क्योंकि यह अग्रणी शून्य को छोटा कर देगा ... (उदाहरण के लिए, कोशिश करें s = "27", चेकसम होना चाहिए"02e74f10e0327ad868d138f2b4fdd6f0" )

मैं अपाचे कॉमन्स कोडेक का उपयोग करने के लिए दूसरा सुझाव देता हूं, मैंने अपने कोड को उसी के साथ बदल दिया।


1
वाह, मैं एक ऐसे मुद्दे पर गौर कर रहा था जहाँ एमडी 5 सामान हर चीज के लिए पूरी तरह से काम कर रहा था, सिवाय एक फाइल के जो हमें केवल 31 हेक्स डिजिट का आउटपुट दे रहा था, और md5checksums को विफल कर रहा था। 0s की अगुवाई करने वाला एक बड़ा दर्द है ... आपके नोट के लिए धन्यवाद।
माइक

8
public static String MD5Hash(String toHash) throws RuntimeException {
   try{
       return String.format("%032x", // produces lower case 32 char wide hexa left-padded with 0
      new BigInteger(1, // handles large POSITIVE numbers 
           MessageDigest.getInstance("MD5").digest(toHash.getBytes())));
   }
   catch (NoSuchAlgorithmException e) {
      // do whatever seems relevant
   }
}

8

बहुत तेज़ और स्वच्छ जावा-विधि जो बाहरी पुस्तकालयों पर निर्भर नहीं करती है:

(यदि आप चाहें तो MD5 को SHA-1, SHA-256, SHA-384 या SHA-512 से बदल दें)

public String calcMD5() throws Exception{
        byte[] buffer = new byte[8192];
        MessageDigest md = MessageDigest.getInstance("MD5");

        DigestInputStream dis = new DigestInputStream(new FileInputStream(new File("Path to file")), md);
        try {
            while (dis.read(buffer) != -1);
        }finally{
            dis.close();
        }

        byte[] bytes = md.digest();

        // bytesToHex-method
        char[] hexChars = new char[bytes.length * 2];
        for ( int j = 0; j < bytes.length; j++ ) {
            int v = bytes[j] & 0xFF;
            hexChars[j * 2] = hexArray[v >>> 4];
            hexChars[j * 2 + 1] = hexArray[v & 0x0F];
        }

        return new String(hexChars);
}


6

मानक जावा रनटाइम पर्यावरण तरीका :

public String checksum(File file) {
  try {
    InputStream fin = new FileInputStream(file);
    java.security.MessageDigest md5er =
        MessageDigest.getInstance("MD5");
    byte[] buffer = new byte[1024];
    int read;
    do {
      read = fin.read(buffer);
      if (read > 0)
        md5er.update(buffer, 0, read);
    } while (read != -1);
    fin.close();
    byte[] digest = md5er.digest();
    if (digest == null)
      return null;
    String strDigest = "0x";
    for (int i = 0; i < digest.length; i++) {
      strDigest += Integer.toString((digest[i] & 0xff) 
                + 0x100, 16).substring(1).toUpperCase();
    }
    return strDigest;
  } catch (Exception e) {
    return null;
  }
}

परिणाम लिनक्स md5sum उपयोगिता के बराबर है।


6

यहां एक सरल फ़ंक्शन है जो सुनील के कोड के चारों ओर लपेटता है ताकि यह एक फ़ाइल को पैरामीटर के रूप में ले जाए। फ़ंक्शन को किसी बाहरी लाइब्रेरी की आवश्यकता नहीं है, लेकिन इसके लिए जावा 7 की आवश्यकता होती है।

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import javax.xml.bind.DatatypeConverter;

public class Checksum {

    /**
     * Generates an MD5 checksum as a String.
     * @param file The file that is being checksummed.
     * @return Hex string of the checksum value.
     * @throws NoSuchAlgorithmException
     * @throws IOException
     */
    public static String generate(File file) throws NoSuchAlgorithmException,IOException {

        MessageDigest messageDigest = MessageDigest.getInstance("MD5");
        messageDigest.update(Files.readAllBytes(file.toPath()));
        byte[] hash = messageDigest.digest();

        return DatatypeConverter.printHexBinary(hash).toUpperCase();
    }

    public static void main(String argv[]) throws NoSuchAlgorithmException, IOException {
        File file = new File("/Users/foo.bar/Documents/file.jar");          
        String hex = Checksum.generate(file);
        System.out.printf("hex=%s\n", hex);            
    }


}

उदाहरण आउटपुट:

hex=B117DD0C3CBBD009AC4EF65B6D75C97B

3

यदि आप निर्माण करने के लिए ANT का उपयोग कर रहे हैं, तो यह मृत-सरल है। अपने build.xml में निम्नलिखित जोड़ें:

<checksum file="${jarFile}" todir="${toDir}"/>

जहाँ jarFile वह JAR है जिसे आप MD5 के विरुद्ध जनरेट करना चाहते हैं, और toDir वह निर्देशिका है जिसे आप MD5 फ़ाइल में रखना चाहते हैं।

अधिक जानकारी यहाँ।


3

Google अमरूद एक नया एपीआई प्रदान करता है। नीचे एक खोजें:

public static HashCode hash(File file,
            HashFunction hashFunction)
                     throws IOException

Computes the hash code of the file using hashFunction.

Parameters:
    file - the file to read
    hashFunction - the hash function to use to hash the data
Returns:
    the HashCode of all of the bytes in the file
Throws:
    IOException - if an I/O error occurs
Since:
    12.0

3

यहां एक आसान बदलाव है जो InputStream.transferTo()जावा 9 और OutputStream.nullOutputStream()जावा 11 से उपयोग करता है । इसके लिए किसी बाहरी लाइब्रेरी की आवश्यकता नहीं है और पूरी फाइल को मेमोरी में लोड करने की आवश्यकता नहीं है।

public static String hashFile(String algorithm, File f) throws IOException, NoSuchAlgorithmException {
    MessageDigest md = MessageDigest.getInstance(algorithm);

    try(BufferedInputStream in = new BufferedInputStream((new FileInputStream(f)));
        DigestOutputStream out = new DigestOutputStream(OutputStream.nullOutputStream(), md)) {
        in.transferTo(out);
    }

    String fx = "%0" + (md.getDigestLength()*2) + "x";
    return String.format(fx, new BigInteger(1, md.digest()));
}

तथा

hashFile("SHA-512", Path.of("src", "test", "resources", "some.txt").toFile());

रिटर्न

"e30fa2784ba15be37833d569280e2163c6f106506dfb9b07dde67a24bfb90da65c661110cf2c5c6f71185754ee5ae3fd83a5465c92f72abd888b03187229da29"

2
public static String getMd5OfFile(String filePath)
{
    String returnVal = "";
    try 
    {
        InputStream   input   = new FileInputStream(filePath); 
        byte[]        buffer  = new byte[1024];
        MessageDigest md5Hash = MessageDigest.getInstance("MD5");
        int           numRead = 0;
        while (numRead != -1)
        {
            numRead = input.read(buffer);
            if (numRead > 0)
            {
                md5Hash.update(buffer, 0, numRead);
            }
        }
        input.close();

        byte [] md5Bytes = md5Hash.digest();
        for (int i=0; i < md5Bytes.length; i++)
        {
            returnVal += Integer.toString( ( md5Bytes[i] & 0xff ) + 0x100, 16).substring( 1 );
        }
    } 
    catch(Throwable t) {t.printStackTrace();}
    return returnVal.toUpperCase();
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.