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

鸿蒙 加解密:对称加解密算法(一)

本文同步发表于微信公众号,微信搜索程语新视界即可关注,每个工作日都有文章更新

一、加解密

在数据存储或传输场景中,可以使用加解密操作来保证数据的机密性,防止敏感数据泄露。

应用场景

场景说明
对称密钥加解密使用同一个密钥进行加密和解密,适合大量数据加密
非对称密钥加解密使用公钥加密、私钥解密,适合密钥分发和数字签名
RSA PKCS1_OAEP获取、设置CipherSpecItem参数

二、对称加密算法

算法特点分组长度支持模式API版本
AES最常用,安全性高128位ECB/CBC/OFB/CFB/CTR/GCM/CCM9+
DES老旧,安全性低64位ECB/CBC/OFB/CFB20+
3DESDES的改进,仍较慢64位ECB/CBC/OFB/CFB9+
SM4国密算法128位ECB/CBC/CTR/OFB/CFB/CFB128/GCM10+
ChaCha20流密码,高效Poly130522+

三、AES对称加密

AES(Advanced Encryption Standard)是最常用的对称加密算法,分组长度为128位(16字节)。

支持的加密模式

模式说明
ECB电子密码本模式,最简单的模式,不推荐
CBC密码块链接模式,需要初始向量IV
OFB输出反馈模式,流模式,无需填充
CFB密码反馈模式,流模式,无需填充
CTR计数器模式,流模式,无需填充
GCM伽罗瓦/计数器模式,认证加密,推荐
CCM计数器与密码块链消息认证码模式,认证加密

支持的密钥长度

密钥长度说明
128 bit16字节,安全性足够
192 bit24字节
256 bit32字节,最高安全级别

支持的填充模式

填充模式说明
NoPadding不带填充,输入数据需与分组长度匹配
PKCS58字节填充(AES实际填充16字节)
PKCS71-255字节填充(AES实际填充16字节)

注意:由于AES分组长度为16字节,PKCS5和PKCS7在AES中都以16字节作为填充长度。

字符串参数格式

格式:[算法][密钥长度]|[分组模式]|[填充模式] 示例:AES128|ECB|PKCS7

AES规格表

分组模式密钥长度(bit)填充模式API版本
ECB128/192/256NoPadding/PKCS5/PKCS79+
CBC128/192/256NoPadding/PKCS5/PKCS79+
CTR128/192/256NoPadding/PKCS5/PKCS79+
OFB128/192/256NoPadding/PKCS5/PKCS79+
CFB128/192/256NoPadding/PKCS5/PKCS79+
GCM128/192/256NoPadding/PKCS5/PKCS79+
CCM128/192/256NoPadding/PKCS5/PKCS79+

特殊说明

  • ECB、CBC模式:明文长度不是128位整数倍时,必须使用填充

  • CCM模式:必须指定附加验证数据aad,且长度≥1字节且≤2048字节

  • CFB、OFB、CTR、GCM、CCM:属于流模式,不需要填充

API 10+特性

从API版本10开始,支持对称加解密不带密钥长度的规格,加解密运算取决于实际输入的密钥长度。

示例:AES|CFB|NoPadding

四、DES对称加密

DES(Data Encryption Standard)是较早的对称加密算法,分组长度为64位(8字节),现已不推荐使用。

支持的加密模式

模式说明
ECB电子密码本模式
CBC密码块链接模式
OFB输出反馈模式
CFB密码反馈模式

密钥长度

密钥长度说明
64 bit8字节(实际有效56位)

支持的填充模式

填充模式说明
NoPadding不带填充,输入数据需与分组长度匹配
PKCS58字节填充
PKCS71-255字节填充(实际填充8字节)

字符串参数格式

示例:DES64|ECB|PKCS7

DES规格表

分组模式密钥长度(bit)填充模式API版本
ECB64NoPadding/PKCS5/PKCS720+
CBC64NoPadding/PKCS5/PKCS720+
OFB64NoPadding/PKCS5/PKCS720+
CFB64NoPadding/PKCS5/PKCS720+

特殊说明

  • ECB、CBC模式:明文长度不是64位整数倍时,必须使用填充

  • API 10+:支持不带密钥长度规格,如DES|CFB|NoPadding

五、3DES对称加密

3DES(Triple DES)是对DES的改进,通过三次DES加密提高安全性,分组长度仍为64位(8字节)。

支持的加密模式

模式说明
ECB电子密码本模式
CBC密码块链接模式
OFB输出反馈模式
CFB密码反馈模式

密钥长度

密钥长度说明
192 bit24字节(3×64位)

支持的填充模式

填充模式说明
NoPadding不带填充
PKCS58字节填充
PKCS71-255字节填充(实际填充8字节)

字符串参数格式

示例:3DES192|ECB|PKCS7

3DES规格表

分组模式密钥长度(bit)填充模式API版本
ECB192NoPadding/PKCS5/PKCS79+
CBC192NoPadding/PKCS5/PKCS79+
OFB192NoPadding/PKCS5/PKCS79+
CFB192NoPadding/PKCS5/PKCS79+

特殊说明

  • ECB、CBC模式:明文长度不是64位整数倍时,必须使用填充

  • API 10+:支持不带密钥长度规格,如3DES|CFB|NoPadding

六、SM4对称加密

SM4是中国国家密码管理局发布的国密算法,分组长度为128位(16字节)。

支持的加密模式

模式说明
ECB电子密码本模式
CBC密码块链接模式
CTR计数器模式
OFB输出反馈模式
CFB密码反馈模式
CFB128128位密码反馈模式
GCM伽罗瓦/计数器模式

密钥长度

密钥长度说明
128 bit16字节

支持的填充模式

填充模式说明
NoPadding不带填充
PKCS516字节填充
PKCS71-255字节填充(实际填充16字节)

字符串参数格式

格式:[算法]_[密钥长度]|[分组模式]|[填充模式] 示例:SM4_128|ECB|PKCS7

SM4规格表

分组模式密钥长度(bit)填充模式API版本
ECB128NoPadding/PKCS5/PKCS710+
CBC128NoPadding/PKCS5/PKCS710+
CTR128NoPadding/PKCS5/PKCS710+
OFB128NoPadding/PKCS5/PKCS710+
CFB128NoPadding/PKCS5/PKCS710+
CFB128128NoPadding/PKCS5/PKCS710+
GCM128NoPadding/PKCS5/PKCS712+

特殊说明

  • ECB、CBC模式:明文长度不是128位整数倍时,必须使用填充

  • SM4算法和密钥长度中间采用符号"_"拼接

七、AES-WRAP

AES-WRAP是一种基于AES的加密算法,用于安全地存储或传输对称密钥,防止密钥在存储或传输过程中被泄露或篡改。

规格表

算法名称字符串参数API版本
AES128_WRAPAES128_WRAP22+
AES256_WRAPAES256_WRAP22+
AES384_WRAPAES384_WRAP22+

八、ChaCha20

ChaCha20是一种流密码算法,无需填充,性能高效,从API 22开始支持。

支持的加密模式

模式说明
Poly1305认证加密模式,提供消息完整性校验

密钥长度

密钥长度说明
256 bit32字节

字符串参数格式

ChaCha20 # 基础模式 ChaCha20|Poly1305 # Poly1305认证模式

规格表

对称算法名密钥长度(bit)字符串参数API版本
ChaCha20256ChaCha2022+
ChaCha20256ChaCha20|Poly130522+

九、填充模式

分组加密算法有固定的分组长度,当最后一组明文数据量不足固定长度时,需要通过填充补齐。

各填充模式说明

模式说明
NoPadding不带填充,输入数据必须与分组长度匹配
PKCS5固定8字节填充,适用于DES/3DES
PKCS71-255字节可变填充,AES/3DES/SM4实际按分组长度填充

不同算法的填充规则

算法分组长度PKCS5/PKCS7填充长度
AES16字节16字节
DES8字节8字节
3DES8字节8字节
SM416字节16字节

流模式说明

对于CFB、OFB、CTR、GCM、CCM这类将分组密码转化为流模式实现的模式,不需要填充,无论是否指定填充模式,都会按照NoPadding实现。

十、常用配置示例

场景字符串参数
AES-128 ECB模式 PKCS7填充AES128|ECB|PKCS7
AES-256 CBC模式 NoPaddingAES256|CBC|NoPadding
AES-128 GCM模式AES128|GCM|NoPadding
3DES-192 CBC模式 PKCS5填充3DES192|CBC|PKCS5
SM4-128 CBC模式 PKCS7填充SM4_128|CBC|PKCS7
ChaCha20基础模式ChaCha20
ChaCha20 Poly1305认证模式ChaCha20|Poly1305

不带密钥长度(API 10+)

场景字符串参数
AES任意长度AES|CFB|NoPadding
DES任意长度DES|CFB|NoPadding
3DES任意长度3DES|CFB|NoPadding

总结

场景推荐算法原因
通用加密AES-256-GCM安全性高,支持认证加密
国密合规SM4-GCM国密标准
密钥封装AES-WRAP专门用于密钥保护
高性能流加密ChaCha20软件实现效率高
遗留系统兼容3DES老系统迁移
要点说明
分组长度AES/SM4 128位,DES/3DES 64位
流模式无需填充CFB/OFB/CTR/GCM/CCM 模式不需要填充
CBC/ECB需要填充必须使用PKCS5/PKCS7填充
字符串格式算法|模式|填充,SM4用下划线连接算法和长度

鸿蒙对称加密支持AES、DES、3DES、SM4、ChaCha20五种算法,通过算法|模式|填充字符串参数配置,其中AES和SM4推荐使用GCM模式实现认证加密。

http://www.jsqmd.com/news/548705/

相关文章:

  • 新手避坑指南:用Arduino Uno和CNC Shield V3驱动42步进电机(附完整代码与接线图)
  • ofa_image-caption实操手册:调整batch_size与image_size平衡速度与显存
  • 数据科学错误可能会毁掉你的学习路径-以及如何避免它们
  • 使用-n8n-和-AI-代理自动化供应链分析工作流程
  • 在Windows上构建专业级Syslog监控系统:Visual Syslog Server完全指南
  • AI语音转换技术实践指南:零基础打造自定义声线的AI翻唱作品
  • 基于51单片机的步进电机调速与状态显示系统(附仿真与源码解析)
  • Qwen3-14B-Int4-AWQ在嵌入式Linux开发中的应用:交叉编译问题智能排查
  • macOS下OpenClaw完整配置:nanobot镜像对接与飞书通道调试
  • 数据科学家必须具备的技能-但软件工程师不需要-
  • 轻量级工具实现Windows安卓部署:APK-Installer跨平台解决方案
  • 三步搞定中小学电子课本下载:告别繁琐操作的全新体验
  • Fire Dynamics Simulator:火灾动力学模拟的技术突破与工程实践
  • 从零基础到AC:西北工业大学NOJ C语言百题通关心法与实战解析
  • 安川机器人motoPlus二次开发:从编译导入到Socket通信实战
  • 别再乱用DbContext了!ASP.NET Core项目里这3种配置方式,你用对了吗?
  • Spann3R深度解析:它如何用‘空间记忆’让DUSt3R学会处理成千上万张图片?
  • 选购超高分子托辊,怎样选到靠谱又好用的产品? - 工业设备
  • Rule Miner:让AI写出“像你团队”的代码
  • 职场生存暗规则 DAY5:同事抢你功劳?用这 1 招让他偷鸡不成蚀把米|乐想屋
  • 国家标准批量采集工具:全量元数据检索 + 批量导出
  • 快速构建skills智能体原型:利用快马平台十分钟搭建可运行AI技能模块
  • 实战指南:如何在ResNet中集成CBAM模块提升图像分类准确率(附代码)
  • 别再说MCU跑不动人脸识别!手把手教你优化LBP算法,在STM32上实现1秒内识别
  • 保姆级避坑指南:用FlyMcu给STM32F103下载程序,别再傻傻先开Keil编译了
  • OpenFeign性能优化最全实战
  • 文墨共鸣大模型生成技术教程:以“计算机组成原理”为例的课件与习题制作
  • FlowState Lab低成本运行方案:在消费级显卡上的优化与适配
  • AI选型与配置:让快马智能推荐npm包并生成个人博客系统前端代码
  • 别急着扔!用Windows虚拟内存和这几招,让老电脑再战三年(附SSD选购建议)