package com.yuyh.library.utils.data.safe; import java.io.IOException; import java.io.InputStream; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; /** * MD5加密 * * @author yuyh. * @date 16/4/9. */ public class MD5 { private static final String TAG = MD5.class.getSimpleName(); private static final int STREAM_BUFFER_LENGTH = 1024; public static MessageDigest getDigest(final String algorithm) throws NoSuchAlgorithmException { return MessageDigest.getInstance(algorithm); } public static byte[] md5(String txt) { return md5(txt.getBytes()); } public static byte[] md5(byte[] bytes) { try { MessageDigest digest = getDigest("MD5"); digest.update(bytes); return digest.digest(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return null; } public static byte[] md5(InputStream is) throws NoSuchAlgorithmException, IOException { return updateDigest(getDigest("MD5"), is).digest(); } public static MessageDigest updateDigest(final MessageDigest digest, final InputStream data) throws IOException { final byte[] buffer = new byte[STREAM_BUFFER_LENGTH]; int read = data.read(buffer, 0, STREAM_BUFFER_LENGTH); while (read > -1) { digest.update(buffer, 0, read); read = data.read(buffer, 0, STREAM_BUFFER_LENGTH); } return digest; } /** * 使用MD5算法对传入的key进行加密并返回。 */ public static String getMD5(String key) { String cacheKey; try { final MessageDigest mDigest = MessageDigest.getInstance("MD5"); mDigest.update(key.getBytes()); cacheKey = bytesToHexString(mDigest.digest()); } catch (NoSuchAlgorithmException e) { cacheKey = String.valueOf(key.hashCode()); } return cacheKey; } private static String bytesToHexString(byte[] bytes) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < bytes.length; i++) { String hex = Integer.toHexString(0xFF & bytes[i]); if (hex.length() == 1) { sb.append('0'); } sb.append(hex); } return sb.toString(); } }