How do I generate MD5 digest from a File or an InputStream object?

In the How do I calculate the MD5 digest of a string? example you can see how to calculate the MD5 digest from a text or a string. We are using the Apache Commons Codec library and use the DigestUtils.md5Hex() method to generate the MD5. I’ve mentioned in that post that we can also generate the MD5 digest of a byte array and InputStream object. In the example below you’ll see an example to generate the MD5 digest of a text data stored in a file.

package org.kodejava.commons.codec;

import org.apache.commons.codec.digest.DigestUtils;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class MD5FileHashDemo {
    public static void main(String[] args) {
        // Define the data file path and create an InputStream object.
        String data = System.getProperty("user.dir") + "/data.txt";
        File file = new File(data);

        try (InputStream is = new FileInputStream(file)) {
            // Calculates the MD5 digest of the given InputStream object.
            // It will generate a 32-character hex string.
            String digest = DigestUtils.md5Hex(is);
            System.out.println("Digest = " + digest);
            System.out.println("Length = " + digest.length());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

The first thing we need to do is to add the import statement to our class to import the org.apache.commons.codec.digest.DigestUtils class. The DigestUtils.md5Hex() method define as a static method so that we don’t have to create an instance of DigestUtils class before we can use it. Before we create the InputStream object we define the path to our data file. Next we create the File object from the defined path followed by creating the InputStream object of the file.

To generate the digest, we can simply pass the instance of the InputStream object into the DigestUtils.md5Hex() method. And if there is no error occurred during the process, we will get a 32 character of hex string as the output. One last thing that you have to do is the catch the possible exception thrown by the method. So we add the try-catch block and print the error stack trace to help us identify any error.

And here is the example output generated by the code snippet above:

Digest = d41d8cd98f00b204e9800998ecf8427e
Length = 32

Maven Dependencies

<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.16.0</version>
</dependency>

Maven Central

Wayan

3 Comments

  1. Would be nice to show a maven dependency to know where exactly org.apache.commons.codec.digest.DigestUtils resides.

    Reply
  2. @petrosipov:disqus

    The dependency could be:

    <dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
        <version>1.8</version>
    </dependency>
    
    Reply

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.