Hashes a String using the Md5 algorithm and returns the result as a String of hexadecimal numbers - Android java.security

Android examples for java.security:MD5

Description

Hashes a String using the Md5 algorithm and returns the result as a String of hexadecimal numbers

Demo Code

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();
  }
}

Related Tutorials