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

一、加解密

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

应用场景

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

二、对称加密算法

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

三、AES对称加密

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

支持的加密模式

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

支持的密钥长度

密钥长度 说明
128 bit 16字节,安全性足够
192 bit 24字节
256 bit 32字节,最高安全级别

支持的填充模式

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

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

字符串参数格式

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

AES规格表

分组模式 密钥长度(bit) 填充模式 API版本
ECB 128/192/256 NoPadding/PKCS5/PKCS7 9+
CBC 128/192/256 NoPadding/PKCS5/PKCS7 9+
CTR 128/192/256 NoPadding/PKCS5/PKCS7 9+
OFB 128/192/256 NoPadding/PKCS5/PKCS7 9+
CFB 128/192/256 NoPadding/PKCS5/PKCS7 9+
GCM 128/192/256 NoPadding/PKCS5/PKCS7 9+
CCM 128/192/256 NoPadding/PKCS5/PKCS7 9+

特殊说明

  • 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 bit 8字节(实际有效56位)

支持的填充模式

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

字符串参数格式

示例:DES64|ECB|PKCS7

DES规格表

分组模式 密钥长度(bit) 填充模式 API版本
ECB 64 NoPadding/PKCS5/PKCS7 20+
CBC 64 NoPadding/PKCS5/PKCS7 20+
OFB 64 NoPadding/PKCS5/PKCS7 20+
CFB 64 NoPadding/PKCS5/PKCS7 20+

特殊说明

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

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

五、3DES对称加密

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

支持的加密模式

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

密钥长度

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

支持的填充模式

填充模式 说明
NoPadding 不带填充
PKCS5 8字节填充
PKCS7 1-255字节填充(实际填充8字节)

字符串参数格式

示例:3DES192|ECB|PKCS7

3DES规格表

分组模式 密钥长度(bit) 填充模式 API版本
ECB 192 NoPadding/PKCS5/PKCS7 9+
CBC 192 NoPadding/PKCS5/PKCS7 9+
OFB 192 NoPadding/PKCS5/PKCS7 9+
CFB 192 NoPadding/PKCS5/PKCS7 9+

特殊说明

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

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

六、SM4对称加密

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

支持的加密模式

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

密钥长度

密钥长度 说明
128 bit 16字节

支持的填充模式

填充模式 说明
NoPadding 不带填充
PKCS5 16字节填充
PKCS7 1-255字节填充(实际填充16字节)

字符串参数格式

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

SM4规格表

分组模式 密钥长度(bit) 填充模式 API版本
ECB 128 NoPadding/PKCS5/PKCS7 10+
CBC 128 NoPadding/PKCS5/PKCS7 10+
CTR 128 NoPadding/PKCS5/PKCS7 10+
OFB 128 NoPadding/PKCS5/PKCS7 10+
CFB 128 NoPadding/PKCS5/PKCS7 10+
CFB128 128 NoPadding/PKCS5/PKCS7 10+
GCM 128 NoPadding/PKCS5/PKCS7 12+

特殊说明

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

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

七、AES-WRAP

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

规格表

算法名称 字符串参数 API版本
AES128_WRAP AES128_WRAP 22+
AES256_WRAP AES256_WRAP 22+
AES384_WRAP AES384_WRAP 22+

八、ChaCha20

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

支持的加密模式

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

密钥长度

密钥长度 说明
256 bit 32字节

字符串参数格式

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

规格表

对称算法名 密钥长度(bit) 字符串参数 API版本
ChaCha20 256 ChaCha20 22+
ChaCha20 256 ChaCha20|Poly1305 22+

九、填充模式

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

各填充模式说明

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

不同算法的填充规则

算法 分组长度 PKCS5/PKCS7填充长度
AES 16字节 16字节
DES 8字节 8字节
3DES 8字节 8字节
SM4 16字节 16字节

流模式说明

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

十、常用配置示例

场景 字符串参数
AES-128 ECB模式 PKCS7填充 AES128|ECB|PKCS7
AES-256 CBC模式 NoPadding AES256|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模式实现认证加密。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐