Security(02):加密算法——对称加密、非对称加密、哈希、国密
更新时间:2026-09-02。本文是
security/Security 领域第 02 篇,接 认证鉴权。加密算法是安全的基石,分为对称加密(AES)、非对称加密(RSA/ECC)、哈希(MD5/SHA)、国密(SM2/SM3/SM4)。各有各的用途:传输加密用 AES+TLS,身份签名用 RSA/ECC,密码存储用哈希+盐,合规用国密。
本文要回答的问题
- 对称加密和非对称加密的区别?谁快谁慢?
- AES 加密流程?密钥长度选 128 还是 256?
- RSA 和 ECC 对比?ECC 为什么更适合移动端?
- 哈希为什么不可逆?加盐哈希是什么?
- 国密 SM2/SM3/SM4 分别是做什么的?
一、加密算法分类
加密算法分为三类:
1. 对称加密
加密和解密用同一个密钥
代表:AES、DES、3DES、SM4
速度:快(Gbps 级别)
问题:密钥分发
2. 非对称加密
加密用公钥,解密用私钥
代表:RSA、ECC、SM2
速度:慢(Mbps 级别)
好处:公钥公开,不需要密钥分发
3. 哈希函数
不可逆,输入可变长度,输出固定长度
代表:MD5、SHA-1、SHA-256、SM3
用途:校验完整性、密码存储对比表:
| 对比 | 对称加密 | 非对称加密 | 哈希 |
|---|---|---|---|
| 密钥 | 同一个密钥 | 公钥+私钥 | 无密钥 |
| 速度 | 快 | 慢 | 快 |
| 安全 | 密钥泄露风险 | 安全 | 碰撞风险 |
| 用途 | 数据加密 | 密钥交换/签名 | 完整性/存储 |
| 代表 | AES | RSA/ECC | SHA-256 |
二、AES——对称加密
AES = Advanced Encryption Standard
密钥长度:128 bit / 192 bit / 256 bit
推荐:AES-256(安全,但 AES-128 也够用)
加密模式:
ECB:最简单,但相同明文得到相同密文,不安全
CBC:需要 IV 向量,相同明文不同密文,推荐
GCM:带认证的加密模式,推荐(AES-GCM)
CTR:流模式,不需要填充
AES-256-CBC 加密流程:
1. 生成随机密钥(256 bit)
2. 生成随机 IV(128 bit)
3. 明文 + IV + 密钥 → AES-CBC 加密 → 密文
4. 传输:IV + 密文(IV 不需要保密)
解密:
1. 接收 IV + 密文
2. IV + 密文 + 密钥 → AES-CBC 解密 → 明文实践建议:
- 用 AES-256-GCM,最安全,带认证
- 密钥不要写死在代码里
- 密钥长度 256 bit,不要用 128 bit
- 定期轮换密钥
三、RSA——非对称加密
RSA = Rivest-Shamir-Adleman
原理:大整数分解困难
n = p × q(p 和 q 是大质数)
公钥:(n, e)
私钥:(n, d)
加密:c = m^e mod n
解密:m = c^d mod n
密钥长度:2048 bit / 4096 bit
推荐:RSA-2048(安全),RSA-4096(更安全,但慢)
RSA 速度:
RSA-2048 加密:约 0.1 MB/s
AES-256 加密:约 1 GB/s
RSA 比 AES 慢 10000 倍
所以实际使用:
非对称加密(RSA)只加密对称密钥
对称加密(AES)加密实际数据
RSA 加密 AES 密钥 → AES 加密数据RSA 的长度限制:
- RSA-2048 一次最多加密 245 字节
- 不能加密大文件
- 大文件 AES 加密,RSA 加密 AES 密钥
四、ECC——椭圆曲线加密
ECC = Elliptic Curve Cryptography
原理:椭圆曲线离散对数困难
y² = x³ + ax + b
ECC vs RSA 对比:
ECC-256 安全性 ≈ RSA-3072
ECC-384 安全性 ≈ RSA-7680
ECC 优点:
密钥更短,同样安全性 ECC 密钥只有 RSA 的 1/10
计算更快,适合移动端
ECC 曲线:
P-256(secp256r1):最常用
P-384:更高安全
Curve25519:速度快,推荐
应用场景:
ECDH(密钥交换)
ECDSA(数字签名)
Ed25519(签名,更快)主流选择: 新系统推荐用 ECC(Ed25519),比 RSA 更快、更安全、密钥更短。
五、哈希
哈希函数 = 不可逆,输入转固定长度
常用哈希:
MD5:128 bit,已不安全,碰撞攻击容易
SHA-1:160 bit,已不安全,建议弃用
SHA-256:256 bit,安全,推荐
SHA-3:最新标准,安全
SM3:国密,256 bit,安全加盐哈希
密码存储不能直接存明文,也不能存哈希就完事
问题:相同密码哈希值相同,容易被彩虹表撞库
解决:加盐(Salt)
Salt = 随机字符串,每个用户不同
存储:Salt + Hash(Salt + Password)
验证:
用户输入密码 → 查 Salt → Hash(Salt + 输入) → 对比存储的哈希
推荐算法:
bcrypt:自带的盐,慢(可调,推荐)
scrypt:内存消耗大,抗 GPU 攻击
Argon2:Password Hashing Competition 的优胜者,推荐结论: 密码存储用 bcrypt 或 Argon2,不要用 MD5/SHA-256 直接哈希。
六、国密算法
| 国密 | 对应国际 | 用途 |
|---|---|---|
| SM2 | ECC | 非对称加密、数字签名 |
| SM3 | SHA-256 | 哈希,输出 256 bit |
| SM4 | AES | 对称加密,128 bit 分组 |
SM2 特点:
- 基于 ECC,256 bit 密钥
- 签名效率高,安全
- 国内金融、政务系统强制要求
SM3 特点:
- 输出 256 bit
- 安全,与 SHA-256 相当
- 国内商用密码认证
SM4 特点:
- 128 bit 分组长度,128 bit 密钥
- 加密速度与 AES 相当
- 国内合规要求
什么时候用国密:
- 国内金融、政务、医疗等合规要求
- 海外业务用国际标准(AES/RSA/SHA-256)
七、常见坑对照
| 错误 | 现象 | 对策 |
|---|---|---|
| 密码明文存储 | 脱库直接泄露 | bcrypt 或 Argon2 加盐哈希 |
| 用 MD5 存密码 | 彩虹表秒破 | 弃用 MD5,用 bcrypt |
| RSA 加密大文件 | 报错 | RSA 只加密 AES 密钥,AES 加密数据 |
| 固定 IV | 相同明文相同密文 | 随机 IV,每次不同 |
| 密钥硬编码 | 反编译就能拿到 | 环境变量或密钥管理服务 |
| 忽略国密合规 | 金融/政务审核不过 | 了解合规要求,用 SM2/SM3/SM4 |
相关与延伸
下一篇:网络安全——TLS/HTTPS 原理、证书链、握手流程;认证鉴权,见 认证鉴权——OAuth2、JWT、Session。
一句话总结
加密算法:对称加密 AES 加密数据快(Gbps),非对称加密 RSA/ECC 加密密钥交换慢(Mbps),实际用 RSA 加密 AES 密钥 + AES 加密数据;ECC 比 RSA 更短更快,新系统推荐 Ed25519;哈希不可逆,密码存储用 bcrypt/Argon2 加盐,不要直接用 MD5/SHA-256;国密 SM2(ECC 签名)、SM3(哈希)、SM4(对称加密),国内合规要求必须用。