Android examples for java.security:MD5
Hashes a String using the Md5 algorithm and returns the result as a String of hexadecimal numbers
import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class Main { /**/*from w ww . j av a2 s . co m*/ * Used by the hash method. */ private static MessageDigest digest = null; /** * Hashes a String using the Md5 algorithm and returns the result as a String of * hexadecimal numbers. This method is synchronized to avoid excessive * MessageDigest object creation. If calling this method becomes a bottleneck in * your code, you may wish to maintain a pool of MessageDigest objects instead * of using this method. * <p> * A hash is a one-way function -- that is, given an input, an output is easily * computed. However, given the output, the input is almost impossible to * compute. This is useful for passwords since we can store the hash and a * hacker will then have a very hard time determining the original password. * <p> * In Jive, every time a user logs in, we simply take their plain text password, * compute the hash, and compare the generated hash to the stored hash. Since it * is almost impossible that two passwords will generate the same hash, we know * if the user gave us the correct password or not. The only negative to this * system is that password recovery is basically impossible. Therefore, a reset * password method is used instead. * * @param data * the String to compute the hash of. * @return a hashed version of the passed-in String */ public synchronized static final String hash(String data) { if (digest == null) { try { digest = MessageDigest.getInstance("MD5"); } catch (NoSuchAlgorithmException nsae) { System.err.println("Failed to load the MD5 MessageDigest. " + "Jive will be unable to function normally."); nsae.printStackTrace(); } } if (digest == null) { return null; } // Now, compute hash. if (data != null) { digest.update(data.getBytes()); } return toHex(digest.digest()); } public static final String toHex(byte hash[]) { StringBuffer buf = new StringBuffer(hash.length * 2); int i; for (i = 0; i < hash.length; i++) { if (((int) hash[i] & 0xff) < 0x10) { buf.append("0"); } buf.append(Long.toString((int) hash[i] & 0xff, 16)); } return buf.toString(); } }