MD5值加密並轉為16進位制
阿新 • • 發佈:2019-02-05
加密方式:MD5值
二進位制轉十六進位制
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(); } } // Now, compute hash. digest.update(data.getBytes()); return toHex(digest.digest()); } /** * Turns an array of bytes into a String representing each byte as an * unsigned hex number. * <p> * Method by Santeri Paavolainen, Helsinki Finland 1996<br> * (c) Santeri Paavolainen, Helsinki Finland 1996<br> * Distributed under LGPL. * * @param hash * an rray of bytes to convert to a hex-string * @return generated hex string */ 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(); }