Pu Zhibing
2025-11-27 414a3acae0686fd39f9296aec3dad512ac2e2f74
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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);
    }
 
}