Java MD5 Hashing Example

MD5 is one in a series of message digest algorithms designed by Professor Ronald Rivest of MIT (Rivest, 1994). When analytic work indicated that MD5’s predecessor MD4 was likely to be insecure, MD5 was designed in 1991 to be a secure replacement. (Weaknesses were indeed later found in MD4 by Hans Dobbertin.)

MD5 is a widely used hashing algorithm in many companies and industries, here are two examples for the MD5 implementation.

1. File checksum with MD5

It will use MD5 hashing algorithm to generate a checksum for file “c:\\loging.log”.


package com.mkyong.test;

import java.io.FileInputStream;
import java.security.MessageDigest;

public class MD5CheckSumExample 
{
    public static void main(String[] args)throws Exception
    {
        MessageDigest md = MessageDigest.getInstance("MD5");
        FileInputStream fis = new FileInputStream("c:\\loging.log");
        
        byte[] dataBytes = new byte[1024];
     
        int nread = 0; 
        while ((nread = fis.read(dataBytes)) != -1) {
          md.update(dataBytes, 0, nread);
        };
        byte[] mdbytes = md.digest();
     
        //convert the byte to hex format method 1
        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());
        
        //convert the byte to hex format method 2
        StringBuffer hexString = new StringBuffer();
    	for (int i=0;i<mdbytes.length;i++) {
    		String hex=Integer.toHexString(0xff & mdbytes[i]);
   	     	if(hex.length()==1) hexString.append('0');
   	     	hexString.append(hex);
    	}
    	System.out.println("Digest(in hex format):: " + hexString.toString());
    }
}
Output

Digest(in hex format):: e72c504dc16c8fcd2fe8c74bb492affa
Digest(in hex format):: e72c504dc16c8fcd2fe8c74bb492affa

2. Hashing String with MD5

It will use MD5 hashing algorithm to generate a hash value for a password "123456".


package com.mkyong.test;

import java.security.MessageDigest;

public class MD5HashingExample 
{
    public static void main(String[] args)throws Exception
    {
    	String password = "123456";
    	
        MessageDigest md = MessageDigest.getInstance("MD5");
        md.update(password.getBytes());
        
        byte byteData[] = md.digest();
 
        //convert the byte to hex format method 1
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < byteData.length; i++) {
         sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
        }
     
        System.out.println("Digest(in hex format):: " + sb.toString());
        
        //convert the byte to hex format method 2
        StringBuffer hexString = new StringBuffer();
    	for (int i=0;i<byteData.length;i++) {
    		String hex=Integer.toHexString(0xff & byteData[i]);
   	     	if(hex.length()==1) hexString.append('0');
   	     	hexString.append(hex);
    	}
    	System.out.println("Digest(in hex format):: " + hexString.toString());
    }
}
Output

Digest(in hex format):: e10adc3949ba59abbe56e057f20f883e
Digest(in hex format):: e10adc3949ba59abbe56e057f20f883e

Reference

1. http://en.wikipedia.org/wiki/MD5
2. http://forums.sun.com/thread.jspa?threadID=5169003

About the Author

author image
mkyong
Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter, or befriend him on Facebook or Google Plus. If you like my tutorials, consider make a donation to these charities.

Comments

Leave a Reply

avatar
newest oldest most voted
Vladimir
Guest
Vladimir

My friend, thank you very much from Russia !!!!

Napster85
Guest
Napster85

What about if you use this:

sb.append(String.format(“%02X”, buffer[i]));

;)

julio
Guest
julio

alguien me dice como desencriptar esta clave E67480325049070253

Cafebabe2018
Guest
Cafebabe2018

for (int i = 0; i < byteData.length; i++) {
sb.append(String.format("%02x", byteData[i]));
}

Prashant
Guest
Prashant

What is the point to generate md5 hash of a password if that cant be reversed?

guest
Guest
guest

You save the generated md5 hash in a file or any other method, If someone fojnd it, s/he wont be able to get the original password (except by brute force) … anyway, when you or anyone else enter the password, you hash the entered password and compare it to the md5 you generated previously.

so in breif, instead of comparing the explict passwords to check if they match, you check theirs hashs.

Qazi Jalil
Guest
Qazi Jalil

but if i do it over some file it works correctly but if i change its path or location of file its hash changes why me not able to fix this error

Eugen Maysyuk
Guest
Eugen Maysyuk

You forgot to close FileInputStream.

Nishu
Guest
Nishu

Its giving a different hash every time with the same input file which should not be the case with MD5 algorithm. I think there is some problem in this code

Ahmed ElZayady
Guest
Ahmed ElZayady

Hi .. The string method above isn’t working fine if the string contains a £ sign, don’t know why. On other hand, the function provided in this link http://www.asjava.com/core-java/java-md5-example/ did work fine with £. May be it is something you might be interested to look into.

Murali Mohan
Guest
Murali Mohan

The world is a fast-changing place. Check out Apache Shiro’s cryptography capabilities.

https://www.youtube.com/watch?v=5ZepGFzYHpE

itsvenkis
Guest
itsvenkis

Hi!!! I really unable to understand why you had

Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1)

instead of

Integer.toString((byteData[i] & 0xff), 16)

If it is just for padding zeros you could have checked the length and added a zero. May be I am missing the whole point. Can you pelase help me understand?

none
Guest
none

Yes, it’s for padding, and It’s just easier syntax than introducing conditional branching.

elton
Guest
elton

hello sir,
i want a simple java code to calculate md5 of any input i give from a keyboard

trackback
Melakukan hashing MD5 pada Java | Super|User|Corner

[…] MKYong […]

siri
Guest
siri

I have 100 file (which are not stored on my computer)that are located on a server and I have path to each one of them, I need a code to calculate the MD5 of each one of the and store it in an excel sheet individually.

Wilson
Guest
Wilson

Is there any way convert the digested “e10adc3949ba59abbe56e057f20f883e” key to original password “123456”. If you know please let us know.

Thanks
Wilson.

Facepalm
Guest
Facepalm

Idiot.

Saifur Rahman Mohsin
Guest
Saifur Rahman Mohsin

You can do this by generating a rainbow table and then comparing the hash with original text. However longer texts will not give the correct output for obvious reasons..!

Tewari
Guest
Tewari

MD5 is one way digest algorithm, this means that you are not supposed/allowed to convert the hash back to text. I would not suggest you to go with Rainbow tables since you would then have to secure and manage the rainbow table itself, besides the bigger the table gets the higher the seek time gets and is therefore not effective. If you want to encrypt text so that it can be converted back to original text you can try base64encoding with secret key.

natesan
Guest
natesan

Dear Sir,
in this example (ff) variable showing some errors.how to rectify the error. thank you sir.the error was ff cannot be resolved to a variable.

nordin
Guest
nordin

md5 is useful when hashing filenames for some reason. I’ll use this snippet of code to hash imagefile names, it’s temporary for a few weeks and than I’ll remove them. The advantage is that this hash method is less cpu intensive and the chances to have the same hash values are very very small. Furthermore, this is a nice simple example, so using a sha-1 instead of md5 is almost the same. Thank you for your snippet :-)

trackback
Java MD5 Hashing Example | Devin Patel

[…] Java MD5 Hashing Example. […]

trackback
Hashing String with MD5 « tediscript.wordpress.com

[…] String with MD5http://www.mkyong.com/java/java-md5-hashing-example/ Share this:TwitterFacebookLike this:LikeBe the first to like this. […]

Cristian
Guest
Cristian

Hello, I am wondering why you would use MD5, an algorithm thats has already been broken instead of something like GrandCentral which creates a password digest based on the time of day using SHA-512. GrandCentral also includes the SimpleCrypto class which can generate hashes and checksums using MD5, SHA1, SHA-256, SHA-384 and SHA-512. Just a suggestion. http://code.google.com/p/grandcentral/

trackback
A short and clean way of computing MD5 in Java | The refuge

[…] are multiple articles (01, 02, 03, 04) talking about how to compute MD5 in Java and some of them have some gotchas regarding the length […]

santosh
Guest
santosh

sir,
give me suggestion for password hashing using md 5 algorithm in java.

Rocky Madden
Guest
Rocky Madden

Been moving towards always using SHA hashing myself, especially with recent CPU processor support/improvements being added each generation. Trusty old MD5 doesn’t let down most of the time though.

gli00001
Guest
gli00001

new BigInteger(1, md.digest()).toString(16) should save the loop using stringBuffer