When downloading a file over internet, the uploader usually provides an MD5 checksum for the file to ensure the integrity of the file. MD5 checksum (message digest) is something like a fingerprint or digital signature for a file. The checksum is unique for a file and there is very small possibility of getting two identical checksums for two different files. In Android, using java security package we can compute the md5 message digest for a file. Here is a sample class to get MD5 checksum from an input stream:
package net.londatiga.android.util; import java.security.MessageDigest; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class Util { private static char[] hexDigits = "0123456789abcdef".toCharArray(); public static String md5(InputStream is) throws IOException { String md5 = ""; try { byte[] bytes = new byte[4096]; int read = 0; MessageDigest digest = MessageDigest.getInstance("MD5"); while ((read = is.read(bytes)) != -1) { digest.update(bytes, 0, read); } byte[] messageDigest = digest.digest(); StringBuilder sb = new StringBuilder(32); for (byte b : messageDigest) { sb.append(hexDigits[(b >> 4) & 0x0f]); sb.append(hexDigits[b & 0x0f]); } md5 = sb.toString(); } catch (Exception e) { e.printStackTrace(); } return md5; } }
To get md5 checksum from a file and compare it with original md5:
try { String md5Origin = "";//original file's md5 checksum String filePath = ""; //fill with the real file path name FileInputStream fis = new FileInputStream(filePath); String md5Checksum = Util.md5(fis); if (md5Checksum.equals(md5Origin)) { //file is valid } } catch (Exception e) { }







This is useful. Thanks!
i want the md5 file
fast
This works, great!