2026-06-24 f4bd1f3c89d906131495a0aca5aaf82966378510
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
package cn.iocoder.yudao.module.iot.core.util;
 
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.digest.DigestUtil;
import cn.hutool.crypto.digest.HmacAlgorithm;
 
/**
 * IoT 产品【动态注册】认证工具类
 * <p>
 * 用于一型一密场景,使用 productSecret 生成签名
 *
 * @author 芋道源码
 */
public class IotProductAuthUtils {
 
    /**
     * 生成设备动态注册签名
     *
     * @param productKey    产品标识
     * @param deviceName    设备名称
     * @param productSecret 产品密钥
     * @return 签名
     */
    public static String buildSign(String productKey, String deviceName, String productSecret) {
        String content = buildContent(productKey, deviceName);
        return DigestUtil.hmac(HmacAlgorithm.HmacSHA256, StrUtil.utf8Bytes(productSecret))
                .digestHex(content);
    }
 
    /**
     * 验证设备动态注册签名
     *
     * @param productKey    产品标识
     * @param deviceName    设备名称
     * @param productSecret 产品密钥
     * @param sign          待验证的签名
     * @return 是否验证通过
     */
    public static boolean verifySign(String productKey, String deviceName, String productSecret, String sign) {
        String expectedSign = buildSign(productKey, deviceName, productSecret);
        return expectedSign.equals(sign);
    }
 
    /**
     * 构建签名内容
     *
     * @param productKey 产品标识
     * @param deviceName 设备名称
     * @return 签名内容
     */
    private static String buildContent(String productKey, String deviceName) {
        return "deviceName" + deviceName + "productKey" + productKey;
    }
 
}