国密SM4算法 - 您值得拥有的加密利器!
🌟 国密SM4算法 - 您值得拥有的加密利器!
📚 目录
- 什么是SM4?
- 为什么选择SM4?
- SM4能做什么?
- 快速上手指南
- 实战案例
- 常见问题
什么是SM4?
SM4(原名SMS4)是中国国家密码管理局发布的国密对称加密算法标准(GM/T 0002-2012),也被称为SM4算法。
它是一款分组加密算法,采用:
- 🔑128位密钥
- 🔒128位分组
- 🔄32轮迭代运算
SM4算法已经广泛应用于金融、政务、电子商务、物联网等多个领域,是保障数据安全的国家标准算法。
为什么选择SM4?
✅ 国家标准,安全可靠
- 国家密码管理局认证
- 已通过国家密码管理局安全性评估
- 符合国家密码管理政策要求
✅ 性能优异
- 软件实现效率高
- 硬件实现资源消耗低
- 加密解密速度快
✅ 开源免费
- 算法公开透明
- 无专利限制
- 可自由使用和修改
✅ 易于集成
- 提供完善的API接口
- 支持多种编程语言
- 文档齐全,示例丰富
SM4能做什么?
🛡️ 数据加密
- 📄 文档加密存储
- 💬 即时通讯消息加密
- 📸 图片/视频加密传输
🔐 身份认证
- 🪪 用户身份验证
- 🏷️ 设备身份认证
- 📝 数字签名
📊 数据完整性
- 📋 数据摘要生成
- 🔍 数据校验
- ⚠️ 完整性验证
🌐 网络安全
- 🔒 SSL/TLS加密
- 🛡️ VPN加密
- 📡 无线通信加密
快速上手指南
📦 环境准备
# 编译命令(Linux/Unix环境)cc-osm4_test sm4_test.c -L/home/lib-lbase-lc-I/home/include🔧 核心函数
SM4算法提供了三个主要函数:
1️⃣sm4()- 字符串密钥版本
longsm4(charsKey[17],intmode,intflag,intiType,char*data,longdata_len,unsignedchar*output,unsignedchariv[16])2️⃣sm4_usKey()- 16进制密钥版本
longsm4_usKey(charsKey[33],intmode,intflag,intiType,unsignedchar*data,longdata_len,unsignedchar*output,unsignedchariv[16])3️⃣sm4_pure_usKey()- 纯16进制字符串版本
longsm4_pure_usKey(charsKey[33],intmode,intflag,intiType,char*data,longdata_len,char*output,longout_data_size,unsignedchariv[16])🎮 参数说明
| 参数 | 说明 |
|---|---|
sKey | 密钥(字符串或16进制串) |
mode | 加密模式(0-ECB, 1-CBC, 2-CFB, 3-OFB, 4-CTR) |
flag | 加解密标志(1-加密, 0-解密) |
iType | 填充类型(0-0填充, 1-PKCS#5, 2-PKCS#7) |
data | 输入数据 |
data_len | 输入数据长度 |
output | 输出缓冲区 |
iv | 初始化向量(CBC/CFB/OFB/CTR模式需要) |
📝 基本使用流程
// 1. 准备密钥和数据charsKey[17]="hello, world!";charinput[200]="pysm4是国密SM4算法的Python! - 实现";// 2. 加密unsignedcharoutput[120]={0};longlLen=sm4(sKey,0,1,0,input,strlen(input),output,NULL);// 3. 解密unsignedchardecryptOutput[200]={0};lLen=sm4(sKey,0,0,0,(char*)output,lLen,decryptOutput,NULL);实战案例
📌 案例1:ECB模式加密(最简单)
// ECB模式 - 电子密码本模式// 特点:简单快速,但相同明文块加密后相同sm4(sKey,0,1,0,input,strlen(input),output,NULL);📌 案例2:CBC模式加密(推荐)
// CBC模式 - 密码分组链接模式// 特点:安全性高,需要初始化向量(IV)unsignedchariv[16]={0};sprintf((char*)iv,"%s","000102030405060708090a0b0c0d0e0f");sm4_usKey(sKey,1,1,0,(unsignedchar*)input,strlen(input),output,iv);📌 案例3:CTR模式加密(高性能)
// CTR模式 - 计数器模式// 特点:支持并行计算,适合大数据量加密sm4_pure_usKey(sKey,4,1,0,input,strlen(input),output,sizeof(output),iv);📌 案例4:PKCS#5填充
// PKCS#5填充 - 自动填充到16字节倍数sm4(sKey,0,1,1,input,strlen(input),output,NULL);常见问题
❓ Q1: SM4和AES有什么区别?
| 特性 | SM4 | AES |
|---|---|---|
| 国家 | 中国 | 美国 |
| 密钥长度 | 128位 | 128/192/256位 |
| 分组长度 | 128位 | 128位 |
| 迭代轮数 | 32轮 | 10/12/14轮 |
| 授权 | 免费 | 无专利限制 |
| 应用 | 国内为主 | 全球通用 |
❓ Q2: 什么时候用哪种模式?
| 模式 | 适用场景 | 安全性 |
|---|---|---|
| ECB | 简单加密,不推荐 | ⭐ |
| CBC | 一般加密,推荐 | ⭐⭐⭐⭐ |
| CFB | 流式加密 | ⭐⭐⭐⭐ |
| OFB | 流式加密 | ⭐⭐⭐ |
| CTR | 高性能加密,推荐 | ⭐⭐⭐⭐⭐ |
❓ Q3: 密钥长度有什么要求?
- 字符串密钥:最多16个字符
- 16进制密钥:最多32个字符(16字节)
❓ Q4: 如何保证安全性?
- ✅ 使用随机密钥
- ✅ 定期更换密钥
- ✅ 使用CBC/CTR模式
- ✅ 妥善保管密钥
- ✅ 使用PKCS#5/PKCS#7填充
🎁 附录
完整示例代码
请查看sm4_test.c文件,包含:
- ✅ ECB模式示例
- ✅ CBC模式示例
- ✅ CTR模式示例
- ✅ 不同填充方式示例
- ✅ SM3摘要算法示例
- ✅ SM2公钥加密示例
- ✅ SM2私钥解密示例
编译运行
# 编译cc-osm4_test sm4_test.c -L/home/lib-lbase-lc-I/home/include# 运行./sm4_test📞 技术支持
如有问题,请参考:
- 📖
pub.h- 头文件定义 - 📖
sm4.c- 算法实现 - 📖
sm4.h- SM4上下文结构
🌈 结语
SM4国密算法,以其安全性高、性能优异、易于使用的特点,已经成为数据加密领域的首选算法。
无论是个人开发者还是企业级应用,SM4都能为您提供可靠的安全保障!
立即开始使用SM4,为您的数据保驾护航!🚀
© 2024 国密SM4算法推广组
让加密更简单,让安全更可靠!
