package com.ruoyi.jianguan.chengdujianguan.util;
|
|
import com.ruoyi.integration.chengdujianguan.util.Encodes;
|
import org.apache.commons.lang3.StringUtils;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
|
import javax.crypto.Mac;
|
import javax.crypto.SecretKey;
|
import javax.crypto.spec.SecretKeySpec;
|
import java.util.Map;
|
|
public class GBSignUtils {
|
|
public static final Logger logger = LoggerFactory.getLogger(GBSignUtils.class);
|
|
public static String sign(Map<String, String> paramValues, String secret) {
|
try {
|
StringBuilder sb = new StringBuilder();
|
for (String value : paramValues.values()) {
|
if (StringUtils.isNotBlank(value)) {
|
sb.append(value);
|
}
|
}
|
logger.debug("需要签名的内容:{},密钥{}", sb.toString(), secret);
|
System.out.println("需要签名的内容:" + sb.toString() + ",密钥" + secret);
|
byte[] md5Digest = HmacMD5Encrypt(sb.toString(), secret);
|
String result = Encodes.encodeHex(md5Digest).toUpperCase();
|
logger.debug("HmacSHA1的签名内容:{}", result);
|
System.out.println("HmacSHA1的签名内容:" + result);
|
return result;
|
} catch (Exception e) {
|
throw new RuntimeException("数据签名出错", e);
|
}
|
}
|
|
/**
|
* 使用 HMAC-MD5 签名方法对对encryptText进行签名
|
*
|
* @param encryptText 被签名的字符串
|
* @param encryptKey 密钥
|
* @return
|
* @throws Exception
|
*/
|
public static byte[] HmacMD5Encrypt(String encryptText, String encryptKey) throws Exception {
|
byte[] data = encryptKey.getBytes("UTF-8");
|
// 根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称
|
SecretKey secretKey = new SecretKeySpec(data, "HmacMD5");
|
// 生成一个指定 Mac 算法 的 Mac 对象
|
Mac mac = Mac.getInstance("HmacMD5");
|
// 用给定密钥初始化 Mac 对象
|
mac.init(secretKey);
|
|
byte[] text = encryptText.getBytes("UTF-8");
|
// 完成 Mac 操作
|
return mac.doFinal(text);
|
}
|
|
}
|