diff --git a/blade-core-tool/src/main/java/org/springblade/core/tool/utils/DigestUtil.java b/blade-core-tool/src/main/java/org/springblade/core/tool/utils/DigestUtil.java index ad3b6db..7ea6ed1 100644 --- a/blade-core-tool/src/main/java/org/springblade/core/tool/utils/DigestUtil.java +++ b/blade-core-tool/src/main/java/org/springblade/core/tool/utils/DigestUtil.java @@ -17,6 +17,11 @@ package org.springblade.core.tool.utils; import org.springframework.lang.Nullable; +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.nio.charset.StandardCharsets; +import java.security.InvalidKeyException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; @@ -65,6 +70,331 @@ public class DigestUtil extends org.springframework.util.DigestUtils { return hash("SHA-512", srcStr); } + + /** + * hmacMd5 + * + * @param data Data to digest + * @param key key + * @return digest as a byte array + */ + public static byte[] hmacMd5(String data, String key) { + return DigestUtil.hmacMd5(data.getBytes(Charsets.UTF_8), key); + } + + /** + * hmacMd5 + * + * @param bytes Data to digest + * @param key key + * @return digest as a byte array + */ + public static byte[] hmacMd5(final byte[] bytes, String key) { + return DigestUtil.digestHmac("HmacMD5", bytes, key); + } + + /** + * hmacMd5 Hex + * + * @param data Data to digest + * @param key key + * @return digest as a hex string + */ + public static String hmacMd5Hex(String data, String key) { + return DigestUtil.encodeHex(hmacMd5(data.getBytes(Charsets.UTF_8), key)); + } + + /** + * hmacMd5 Hex + * + * @param bytes Data to digest + * @param key key + * @return digest as a hex string + */ + public static String hmacMd5Hex(final byte[] bytes, String key) { + return DigestUtil.encodeHex(hmacMd5(bytes, key)); + } + + /** + * hmacSha1 + * + * @param data Data to digest + * @param key key + * @return digest as a byte array + */ + public static byte[] hmacSha1(String data, String key) { + return DigestUtil.hmacSha1(data.getBytes(Charsets.UTF_8), key); + } + + /** + * hmacSha1 + * + * @param bytes Data to digest + * @param key key + * @return digest as a byte array + */ + public static byte[] hmacSha1(final byte[] bytes, String key) { + return DigestUtil.digestHmac("HmacSHA1", bytes, key); + } + + /** + * hmacSha1 Hex + * + * @param data Data to digest + * @param key key + * @return digest as a hex string + */ + public static String hmacSha1Hex(String data, String key) { + return DigestUtil.encodeHex(hmacSha1(data.getBytes(Charsets.UTF_8), key)); + } + + /** + * hmacSha1 Hex + * + * @param bytes Data to digest + * @param key key + * @return digest as a hex string + */ + public static String hmacSha1Hex(final byte[] bytes, String key) { + return DigestUtil.encodeHex(hmacSha1(bytes, key)); + } + + /** + * hmacSha224 + * + * @param data Data to digest + * @param key key + * @return digest as a hex string + */ + public static byte[] hmacSha224(String data, String key) { + return DigestUtil.hmacSha224(data.getBytes(Charsets.UTF_8), key); + } + + /** + * hmacSha224 + * + * @param bytes Data to digest + * @param key key + * @return digest as a hex string + */ + public static byte[] hmacSha224(final byte[] bytes, String key) { + return DigestUtil.digestHmac("HmacSHA224", bytes, key); + } + + /** + * hmacSha224 Hex + * + * @param data Data to digest + * @param key key + * @return digest as a hex string + */ + public static String hmacSha224Hex(String data, String key) { + return DigestUtil.encodeHex(hmacSha224(data.getBytes(Charsets.UTF_8), key)); + } + + /** + * hmacSha224 Hex + * + * @param bytes Data to digest + * @param key key + * @return digest as a hex string + */ + public static String hmacSha224Hex(final byte[] bytes, String key) { + return DigestUtil.encodeHex(hmacSha224(bytes, key)); + } + + /** + * hmacSha256 + * + * @param data Data to digest + * @param key key + * @return digest as a hex string + */ + public static byte[] hmacSha256(String data, String key) { + return DigestUtil.hmacSha256(data.getBytes(Charsets.UTF_8), key); + } + + /** + * hmacSha256 + * + * @param bytes Data to digest + * @param key key + * @return digest as a byte array + */ + public static byte[] hmacSha256(final byte[] bytes, String key) { + return DigestUtil.digestHmac("HmacSHA256", bytes, key); + } + + /** + * hmacSha256 Hex + * + * @param data Data to digest + * @param key key + * @return digest as a byte array + */ + public static String hmacSha256Hex(String data, String key) { + return DigestUtil.encodeHex(hmacSha256(data.getBytes(Charsets.UTF_8), key)); + } + + /** + * hmacSha256 Hex + * + * @param bytes Data to digest + * @param key key + * @return digest as a hex string + */ + public static String hmacSha256Hex(final byte[] bytes, String key) { + return DigestUtil.encodeHex(hmacSha256(bytes, key)); + } + + /** + * hmacSha384 + * + * @param data Data to digest + * @param key key + * @return digest as a byte array + */ + public static byte[] hmacSha384(String data, String key) { + return DigestUtil.hmacSha384(data.getBytes(Charsets.UTF_8), key); + } + + /** + * hmacSha384 + * + * @param bytes Data to digest + * @param key key + * @return digest as a byte array + */ + public static byte[] hmacSha384(final byte[] bytes, String key) { + return DigestUtil.digestHmac("HmacSHA384", bytes, key); + } + + /** + * hmacSha384 Hex + * + * @param data Data to digest + * @param key key + * @return digest as a hex string + */ + public static String hmacSha384Hex(String data, String key) { + return DigestUtil.encodeHex(hmacSha384(data.getBytes(Charsets.UTF_8), key)); + } + + /** + * hmacSha384 Hex + * + * @param bytes Data to digest + * @param key key + * @return digest as a hex string + */ + public static String hmacSha384Hex(final byte[] bytes, String key) { + return DigestUtil.encodeHex(hmacSha384(bytes, key)); + } + + /** + * hmacSha512 + * + * @param data Data to digest + * @param key key + * @return digest as a byte array + */ + public static byte[] hmacSha512(String data, String key) { + return DigestUtil.hmacSha512(data.getBytes(Charsets.UTF_8), key); + } + + /** + * hmacSha512 + * + * @param bytes Data to digest + * @param key key + * @return digest as a byte array + */ + public static byte[] hmacSha512(final byte[] bytes, String key) { + return DigestUtil.digestHmac("HmacSHA512", bytes, key); + } + + /** + * hmacSha512 Hex + * + * @param data Data to digest + * @param key key + * @return digest as a hex string + */ + public static String hmacSha512Hex(String data, String key) { + return DigestUtil.encodeHex(hmacSha512(data.getBytes(Charsets.UTF_8), key)); + } + + /** + * hmacSha512 Hex + * + * @param bytes Data to digest + * @param key key + * @return digest as a hex string + */ + public static String hmacSha512Hex(final byte[] bytes, String key) { + return DigestUtil.encodeHex(hmacSha512(bytes, key)); + } + + /** + * digest Hmac Hex + * + * @param algorithm 算法 + * @param text text + * @return digest as a hex string + */ + public static String digestHmacHex(String algorithm, String text, String key) { + return digestHmacHex(algorithm, text.getBytes(StandardCharsets.UTF_8), key); + } + + /** + * digest Hmac Hex + * + * @param algorithm 算法 + * @param bytes Data to digest + * @return digest as a hex string + */ + public static String digestHmacHex(String algorithm, final byte[] bytes, String key) { + return DigestUtil.encodeHex(DigestUtil.digestHmac(algorithm, bytes, key)); + } + + /** + * digest Hmac + * + * @param algorithm 算法 + * @param bytes Data to digest + * @return digest as a byte array + */ + public static byte[] digestHmac(String algorithm, final byte[] bytes, String key) { + SecretKey secretKey = new SecretKeySpec(key.getBytes(Charsets.UTF_8), algorithm); + try { + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + return mac.doFinal(bytes); + } catch (NoSuchAlgorithmException | InvalidKeyException e) { + throw Exceptions.unchecked(e); + } + } + + /** + * encode Hex + * + * @param bytes Data to Hex + * @return bytes as a hex string + */ + public static String encodeHex(byte[] bytes) { + return HexUtil.encodeToString(bytes); + } + + /** + * decode Hex + * + * @param hexStr Hex string + * @return decode hex to bytes + */ + public static byte[] decodeHex(final String hexStr) { + return HexUtil.decode(hexStr); + } + public static String hash(String algorithm, String srcStr) { try { MessageDigest md = MessageDigest.getInstance(algorithm);