常见加密算法详解:AES、RSA、ECC、SHA系列
做存量数据加密迁移,最头疼的事其实是「选算法」。我个人习惯先摸清不同算法的脾气,再决定在哪个环节用谁。今天咱们就把四个最常用的家伙——AES、RSA、ECC、SHA——挨个过一遍,说白了就是让你知道它们各自能干嘛、有什么坑。
1. AES(高级加密标准)—— 对称加密的扛把子
AES 是目前最经典的对称加密算法。什么意思?加密和解密用同一把钥匙。速度快、强度高,适合加密大块数据,比如你迁移数据库表时直接对字段加密。
我在项目中遇到过批量加密亿级记录的场景,选的就是 AES-256-GCM 模式。GCM 模式自带认证,能防止数据被篡改,省掉单独做 HMAC 的麻烦。
# Python 示例:AES-256-GCM 加密
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
key = AESGCM.generate_key(bit_length=256)
aesgcm = AESGCM(key)
nonce = os.urandom(12)
ciphertext = aesgcm.encrypt(nonce, b"存量数据字段", None)
# 解密
plaintext = aesgcm.decrypt(nonce, ciphertext, None)
2. RSA(Rivest–Shamir–Adleman)—— 非对称的元老
RSA 靠大整数分解难题保障安全。公钥公开,私钥自己留着。速度比 AES 慢很多,所以一般只用来加密小数据(比如交换 AES 密钥)。
嗯,这里要注意:RSA 密钥长度现在至少 2048 位,4096 位更稳。我曾经见过遗留系统里还在用 1024 位的 RSA,那基本等于没锁门。
# RSA 密钥生成(2048 位)
from cryptography.hazmat.primitives.asymmetric import rsa
private_key = rsa.generate_private_key(public_exponent=65537, key_size=2048)
public_key = private_key.public_key()
3. ECC(椭圆曲线加密)—— 后起之秀
ECC 用椭圆曲线上的点运算实现非对称加密。同等安全强度下,密钥比 RSA 短得多:256 位 ECC ≈ 3072 位 RSA。所以计算快、带宽省,特别适合移动端或 IoT 设备。
现在大量 TLS 1.3 握手都在用 X25519(一种 ECC 曲线)。我也在迁移项目中把旧的 RSA 证书换成 ECDSA,握手时间减少了一倍。
# 使用 X25519 密钥交换
from cryptography.hazmat.primitives.asymmetric import x25519
private_key = x25519.X25519PrivateKey.generate()
public_key = private_key.public_key()
4. SHA 系列(安全哈希算法)—— 数据的指纹
SHA 不是加密算法,不保护数据隐私。它做的是「完整性校验」——给数据算一个固定长度的指纹,只要数据被改一丁点,指纹就完全变样。
SHA-1 已经淘汰了,速度再快也别用。我见过一些遗留系统还在用 SHA-1 做证书签名,直接导致 Chrome 报安全风险。现在最低要求是 SHA-256,未来考虑 SHA-3。
# SHA-256 计算哈希值
import hashlib
hash_obj = hashlib.sha256(b"存量数据块")
print(hash_obj.hexdigest()) # 输出 64 个十六进制字符
算法对比速查
下面这张表帮你快速对比这四个家伙,面试或选型时一把梭。
| 算法 | 类型 | 典型密钥长度 | 速度 | 主要用途 |
|---|---|---|---|---|
| AES | 对称加密 | 128/192/256 bit | 极快(硬件加速) | 大数据量加密 |
| RSA | 非对称加密 | 2048/4096 bit | 慢(指数级运算) | 密钥交换、数字签名 |
| ECC | 非对称加密 | 256 bit(≈ RSA 3072) | 较快 | 证书签名、TLS 密钥协商 |
| SHA-256 | 哈希函数 | 256 bit 输出 | 极快 | 完整性校验、数据指纹 |
核心概念关系图
我把上面四种算法按照「对称/非对称/哈希」分了个类图,方便你一眼看清它们在整个密码工具箱里的位置。
总结一下:AES 是主力,RSA 是老兵,ECC 是新生代,SHA 是守门员。你在做存量数据迁移时,建议用 AES-256 加密数据块,用 ECDSA 签名证书,用 SHA-256 校验文件完整性——这套组合拳我从没出过问题。