国密算法 SM1-SM4 科普与映翰通 IG502 的 SM4 加密 MQTT 上云实战
一、国密算法 SM1-SM4 科普
1.1 什么是国密算法?
国密算法(国产密码算法)是由国家密码管理局发布的一系列商用密码算法标准,主要包括 SM1、SM2、SM3、SM4。在工业物联网、智慧城市、政务系统、智慧水务等领域应用广泛,满足合规与数据安全要求。
1.2 算法分类一览
| 类型 | 算法 | 说明 |
| 对称加密 | SM1 | 分组密码,仅硬件实现,算法不公开 |
| 对称加密 | SM4 | 分组密码,软件/硬件均可,最常用 |
| 非对称加密 | SM2 | 椭圆曲线公钥算法,数字签名、密钥交换、加密 |
| 哈希算法 | SM3 | 密码杂凑算法,256 位输出,完整性校验 |
1.3 各算法简要说明
SM1(对称加密,仅硬件)
1.密钥/分组长度:128 位
2.特点:算法不公开,仅以芯片形式提供,安全性高、成本高
3.典型场景:金融 POS/ATM、高安全政务系统
SM2(非对称加密)
1.密钥长度:256 位(公钥、私钥)
2.标准:GB/T 32918-2016
3.功能:数字签名、密钥交换、数据加密
4.典型场景:身份认证、电子签章、物联网设备认证、密钥协商
SM3(哈希算法)
1.输出长度:256 位(32 字节)
2.标准:GB/T 32905-2016
3.特点:不可逆、固定长度、雪崩效应、抗碰撞
4.典型场景:数据完整性校验、与 SM2 配合做数字签名、密码存储
SM4(对称加密,最常用)
1.密钥长度:128 位(16 字节)
2.分组长度:128 位(16 字节)
3.标准:GB/T 32907-2016
4.特点:算法公开、可软件实现、性能好、成本低,**物联网数据传输加密首选**
5.加密模式:ECB、CBC、CFB、OFB、CTR 等
6.典型场景:MQTT/HTTP 数据加密、数据库/文件加密、水务/工业数据上云
记忆口诀:
SM1:硬件专供、高安全
SM2:签名、认证、密钥交换
SM3:哈希、完整性
SM4:数据加密、上云传输首选
二、为什么 IG502 上云推荐用 SM4?
合规:符合国密标准,满足行业与政策要求。
性能:对称加密,适合网关侧对采集数据做实时加密。
成本:无需专用加密芯片,软件即可实现。
生态:Python 有现成国密库(如 gmssl),便于在 DeviceSupervisor Agent 的快函数中集成。
典型链路:设备数据 → IG502 采集 → SM4 加密 → MQTT 发布 → 云端解密入库。
三、IG502 与 DeviceSupervisor Agent 简介
IG502:映翰通边缘计算网关,支持蜂窝/以太网接入、Python 二次开发,可内置 DeviceSupervisor Agent(DSA)服务。
DSA:支持多种南向采集协议(如 Modbus、OPC 等),北向支持标准 MQTT、MQTT SparkPlugB、阿里云 IoT、AWS IoT、Azure IoT 等,数据经“采集 → 处理 → 发布”后上云。
MQTT 上云时,可在 发布脚本(快函数) 里对 payload 做 SM4 加密,云端再按相同算法解密。
四、IG502 使用 SM4 加密数据上传 MQTT 的完整操作流程
整体流程:准备 SM4 库 → 配置 MQTT 云服务 → 配置发布脚本(含 SM4 加密)→ 可选:订阅与云端解密。
4.1 准备 SM4 加密库
1.在 PC 上准备 SM4加密包的 Python 包。
2.通过 IG502 的 第三方库管理 将 gmssl 导入到网关,供 DSA 快函数使用。 按照DAS说明书将包和info文件打包成相应文件格式的压缩包。

3.打包最好使用Windows命令行的方式,在命令行中输入打包命令,

4.完成打包后,在网关第三方库管理中上传库,上传成功后如图显示,

5.如果上传不成功,网关会提示上传不成功,可以在app的日志中查看具体原因,如果是这样,表示打包不成功,没有识别到info文件,可以重新打包,或者换一种打包格式,比如刚开始是zip,可以换成tar.gz格式

4.2 配置 MQTT 云服务
1. 登录 IG502 的 DeviceSupervisor Agent 管理界面。
2. 进入 云服务 → MQTT 云服务。
3. 启用云服务,云平台类型选择 “标准 MQTT”。
4. 配置基本参数:
服务器地址:MQTT Broker 地址(如 `broker.emqx.io` 或自建服务器)。
MQTT 客户端 ID:唯一标识,避免与其它设备冲突。
端口号:如 1883(非 TLS)、8883(TLS)。
5. 可选:
启用用户验证:填写 MQTT 用户名/密码。
TLS 加密:需要时开启,实现“传输层 TLS + 应用层 SM4”双重保护。
6. 点击 提交,确认状态栏显示 连接成功。
4.3 配置发布消息(SM4 加密)
1. 在 消息管理 → 发布 中 添加 一条发布消息。
2. 配置项建议:
名称:如 `test6`(名称在消息管理中需唯一)。
数据源类型:测点数据(或按需选告警数据)。
分组/标签:选择要上云的测点分组。
Topic: `inhand_sub`
Qos(MQTT):1。
入口函数:`main`。
3. 函数代码:使用下面提供的 SM4 加密发布脚本。
4. 提交保存。
4.4 密钥管理(重要)
SM4 密钥为 16 字节(128 位),加密端与解密端必须一致。
不要在脚本中写死密钥;建议在 系统 → 自定义参数中增加参数(如 `sm4_key`),值为 16 字节密钥的 Base64 编码,在脚本中通过 `get_global_parameter()` 读取并 Base64 解码后使用。
生产环境应定期更换密钥,并同步到云端。
五、MQTT 上传代码怎么写(发布)
5.1 网关设置
首先,创建云服务上传数据,在云服务处,启动云服务,设置需要上传数据的一些参数,如图所示:
注意:MQTT服务器连接成功需要网关可以通外网,通过连接WiFi或者插SIM卡的方式联网。

在发布消息处设置相关参数与配置:测点数据分组了要注意别选错了,设置topic,完成后编写代码,在代码中可以引用刚刚导入的库文件,代码写完后确认就可以使用SM4加密消息,将加密的数据上传至MQTT云平台。

5.2 日志查看
可以通过日志查看使用SM4加密是否成功,成功后上传的数据是什么,

也可以使用MQTT服务器去查看。

更多推荐
所有评论(0)