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