常见加密算法详解:AES、RSA、ECC、SHA系列

做存量数据加密迁移,最头疼的事其实是「选算法」。我个人习惯先摸清不同算法的脾气,再决定在哪个环节用谁。今天咱们就把四个最常用的家伙——AES、RSA、ECC、SHA——挨个过一遍,说白了就是让你知道它们各自能干嘛、有什么坑。

1. AES(高级加密标准)—— 对称加密的扛把子

AES 是目前最经典的对称加密算法。什么意思?加密和解密用同一把钥匙。速度快、强度高,适合加密大块数据,比如你迁移数据库表时直接对字段加密。

我在项目中遇到过批量加密亿级记录的场景,选的就是 AES-256-GCM 模式。GCM 模式自带认证,能防止数据被篡改,省掉单独做 HMAC 的麻烦。

关键参数:密钥长度 128/192/256 位;推荐 AES-256-GCM(加密+认证一次性搞定)。
# 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)
小技巧:nonce 每次必须唯一。我习惯用时间戳+计数器组合,确保不重复。

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()
避坑指南:我曾经拿 RSA 直接加密一个大文件(50MB),结果跑了 3 分钟还在算……后来老老实实改用「RSA 加密 AES 密钥 + AES 加密数据」的混合模式。记住,RSA 不能一次加密超过密钥长度减 OAE 开销的数据。

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()
注意:ECC 的曲线选择很重要。P-256 是 NIST 标准,X25519 是伯恩斯坦曲线,两者都有广泛支持。我建议优先用 X25519,性能更好。

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 个十六进制字符
常用场景:TLS 握手时的证书摘要、存储用户密码的「加盐哈希」、文件完整性验证(如 MD5 的升级替代)。

算法对比速查

下面这张表帮你快速对比这四个家伙,面试或选型时一把梭。

算法类型典型密钥长度速度主要用途
AES对称加密128/192/256 bit极快(硬件加速)大数据量加密
RSA非对称加密2048/4096 bit慢(指数级运算)密钥交换、数字签名
ECC非对称加密256 bit(≈ RSA 3072)较快证书签名、TLS 密钥协商
SHA-256哈希函数256 bit 输出极快完整性校验、数据指纹
避坑提醒:我曾经在迁移项目中把哈希算法误用作加密——以为 SHA-256 加个盐就能当密文存储密码,结果被审计发现不满足合规要求。记住,哈希不可逆,不能用来保护数据隐私;加密需要密钥,哈希不需要。

核心概念关系图

我把上面四种算法按照「对称/非对称/哈希」分了个类图,方便你一眼看清它们在整个密码工具箱里的位置。

常见加密算法知识结构 常见加密算法 对称加密 非对称加密 哈希函数 AES (256-GCM) RSA (2048+) ECC (X25519) SHA-256 / SHA-3 ⚠️ 选型原则:大数据加密用 AES;密钥交换/数字签名用 ECC(首选)或 RSA;完整性校验用 SHA-256 或 SHA-3。 避免 SHA-1、RSA-1024、ECB 模式等已淘汰或弱安全选项。

总结一下:AES 是主力,RSA 是老兵,ECC 是新生代,SHA 是守门员。你在做存量数据迁移时,建议用 AES-256 加密数据块,用 ECDSA 签名证书,用 SHA-256 校验文件完整性——这套组合拳我从没出过问题。