哈希编码及十六进制关联工具
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import org.apache.commons.lang3.StringUtils;
import lombok.extern.slf4j.Slf4j;
/**
* @Description 哈希编码及十六进制关联工具
* @author MikePark
* @Date 2021/5/29
* @version 1.0.0
*/
@Slf4j
public class HashHexUtils {
private HashHexUtils() {
throw new IllegalStateException("Utility class");
}
/**
* 生成哈希编码(MD5/SHA-1/SHA-256/SHA-384/SHA-512)
* @param source
* @param charset
* @return
*/
public static String encodeHash(String source, String type, String charset) {
try {
MessageDigest md = MessageDigest.getInstance(type);
return bytes2Hex(StringUtils.isBlank(charset)
?md.digest(source.getBytes())
:md.digest(source.getBytes(charset)));
} catch (NoSuchAlgorithmException | UnsupportedEncodingException ex) {
log.error(ex.getMessage());
}
return null;
}
/**
* 字节数组转换成十六进制字符串
* @param byteArray 字节数组
* @return
*/
private static String bytes2Hex(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (int i = 0, len = bytes.length; i < len; i++) {
sb.append(byte2Hex(bytes[i]));
}
return sb.toString();
}
/**
* 字节转换成十六进制字符
* @param bt
* @return
*/
private static String byte2Hex(byte bt) {
char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
char[] chars = new char[2];
chars[0] = hexDigits[(bt >>> 4) & 0X0F];
chars[1] = hexDigits[bt & 0X0F];
String str = new String(chars);
return str;
}
}