当前位置: 首页 > news >正文

国密 SM4 加密 C 语言嵌入式实现

大家好,我是嵌入式学习菌,一名在上海嘉定深耕 ESP32、电力物联网开发的工程师。在电表、工控类嵌入式项目中,国密 SM4 加密是数据传输的硬性安全要求,今天我就结合你提供的完整可运行代码,逐行逐模块深度拆解,纯 C 实现、无第三方依赖、直接移植到 ESP32/STM32,完美适配电表 JSON 报文加密场景。


一、为什么嵌入式设备必用 SM4?

  1. 国密标准:我国商用密码算法,电力 / 物联网项目强制合规
  2. 轻量高效:16 字节密钥 + 16 字节分组,MCU 资源占用极低
  3. 速度快:对称加密,适合嵌入式实时数据传输
  4. 通用性强:ECB 模式开箱即用,适配电表 Payload 变长数据加密

二、完整代码 + 逐模块深度详解

代码完全对齐你提供的工程版本,支持字符串明文加密、PKCS7 填充、十六进制输出,直接用于项目。

完整工程代码

c

运行

#include <stdint.h> #include <string.h> #include <stdlib.h> #include <stdio.h> // ===================== SM4 标准固定参数(国密规范,禁止修改) ===================== // SM4分组长度:固定16字节 #define SM4_BLOCK_SIZE 16 // SM4密钥长度:固定16字节 #define SM4_KEY_SIZE 16 // 国密SM4官方标准S盒(算法核心置换表,固定值) static const uint8_t SM4_SBOX[256] = { 0xd6,0x90,0xe9,0xfe,0xcc,0xe1,0x3d,0xb7,0x16,0xb6,0x14,0xc2,0x28,0xfb,0x2c,0x05, 0x2b,0x67,0x9a,0x76,0x2a,0xbe,0x04,0xc3,0xaa,0x44,0x13,0x26,0x49,0x86,0x06,0x99, 0x9c,0x42,0x50,0xf4,0x91,0xef,0x98,0x7a,0x33,0x54,0x0b,0x43,0xed,0xcf,0xac,0x62, 0xe4,0xb3,0x1c,0xa9,0xc9,0x08,0xe8,0x95,0x80,0xdf,0x94,0xfa,0x75,0x8f,0x3f,0xa6, 0x47,0x07,0xa7,0xfc,0xf3,0x73,0x17,0xba,0x83,0x59,0x3c,0x19,0xe6,0x85,0x4f,0xa8, 0x68,0x6b,0x81,0xb2,0x71,0x64,0xda,0x8b,0xf8,0xeb,0x0f,0x4b,0x70,0x56,0x9d,0x35, 0x1e,0x24,0x0e,0x5e,0x63,0x58,0xd1,0xa2,0x25,0x22,0x7c,0x3b,0x01,0x21,0x78,0x87, 0xd4,0x00,0x46,0x57,0x9f,0xd3,0x27,0x52,0x4c,0x36,0x02,0xe7,0xa0,0xc4,0xc8,0x9e, 0xea,0xbf,0x8a,0xd2,0x40,0xc7,0x38,0xb5,0xa3,0xf7,0xf2,0xce,0xf9,0x61,0x15,0xa1, 0xe0,0xae,0x5d,0xa4,0x9b,0x34,0x1a,0x55,0xad,0x93,0x32,0x30,0xf5,0x8c,0xb1,0xe3, 0x1d,0xf6,0xe2,0x2e,0x82,0x66,0xca,0x60,0xc0,0x29,0x23,0xab,0x0d,0x53,0x4e,0x6f, 0xd5,0xdb,0x37,0x45,0xde,0xfd,0x8e,0x2f,0x03,0xff,0x6a,0x72,0x6d,0x6c,0x5b,0x51, 0x8d,0x1b,0xaf,0x92,0xbb,0xdd,0xbc,0x7f,0x11,0xd9,0x5c,0x41,0x1f,0x10,0x5a,0xd8, 0x0a,0xc1,0x31,0x88,0xa5,0xcd,0x7b,0xbd,0x2d,0x74,0xd0,0x12,0xb8,0xe5,0xb4,0xb0, 0x89,0x69,0x
http://www.jsqmd.com/news/615738/

相关文章:

  • [Linux][虚拟串口]x一个特殊的字节露
  • 带标注信息的交通信号灯识别数据集,可识别左转灯,红绿黄灯,识别率82.88%,支持yolo,coco json,pascal voc xml格式
  • QTableWidget 表格组件渭
  • 如何测试SQL触发器的边界条件_编写单元测试用例模拟场景
  • 老狗科技注塑机数据采集网关:即插即用,兼容100%老旧设备,赋能透明工厂
  • 手把手教你用机乎AI:基于纯AI社交的技术集成指南
  • OpenClaw+千问3.5-35B-A3B-FP8:学术PDF自动摘要与图表解析
  • 大数据开发学习Day8
  • 《四十悟赋》
  • Prodigy宣布推出全球业界功能强大的I3C协议训练器
  • esp-gui:面向ESP32的轻量级嵌入式GUI事件驱动框架
  • WebSerial:基于WebSocket的MCU嵌入式Web终端技术
  • 电商客服+导购智能体的设计与开发豆
  • LangGraph V1.0.5 文档精炼版
  • OpenClaw学习助手:百川2-13B量化模型自动整理课程笔记
  • Springboot 实现多数据源(PostgreSQL 和 SQL Server)连接该
  • AI开发-python-langchain框架(--并行流程 )伪
  • 企业级医疗 IoT 平台实战:实时生命体征系统从单机高并发到云原生流式 AI 的架构演进
  • 力扣396
  • 深度解析:红海云为何成为大中型企业首选HR数字化底座
  • OpenClaw+SecGPT-14B低成本方案:树莓派家庭安全中枢搭建
  • DS18B20多点温度采集驱动库设计与工业应用
  • 打理多个微信不用慌,告别切换内耗很简单
  • 碳纳米管的导电性、导热性到底有多好?
  • 大模型之Linux服务器部署大模型礁
  • OpenClaw智能监控:基于千问3.5-9B的7×24小时系统巡检
  • OpenClaw+Phi-3-mini-128k-instruct:法律文件比对与风险点标注系统
  • 基础算法-高精度:高精度减法
  • FastAPI子应用挂载:别再让root_path坑你一夜贾
  • SteerBot_TB6612:面向差速转向机器人的TB6612驱动Arduino库