Python 加密算法全景指南:原理、对比与工程化选型
在 Python 后端、数据安全、AI 系统工程中,"加密 "几乎是绕不开的基础能力:
数据库字段要不要加密?接口怎么防止被窃听?配置文件如何安全落盘?
这篇文章用工程视角 系统梳理 Python 常见加密算法 ,对比它们的原理、优缺点和适用场景 ,并给出可直接落地的示例代码。
一、先把概念拎清:什么是"加密"
加密(Encryption) 的核心目标只有一个:
让"非授权的人"无法读懂数据,但"授权的人"可以还原原文。
它和哈希最大的区别在于:
- ✅ 加密是可逆的
- ❌ 哈希是不可逆的
二、加密算法的三大分类
1️⃣ 对称加密(Symmetric Encryption)
加密和解密使用同一把密钥
典型算法
- AES(最主流)
- DES / 3DES(已过时,不推荐)
特点
- 🚀 速度快
- 🔐 安全性高(前提是密钥安全)
- 😖 密钥分发是最大难点
2️⃣ 非对称加密(Asymmetric Encryption)
公钥加密,私钥解密
典型算法
- RSA
- ECC(椭圆曲线,加密/签名)
特点
- 🔑 密钥分离(公钥可公开)
- 🐢 速度慢
- 📦 常用于密钥交换 / 签名,而非大数据加密
3️⃣ 混合加密(工程实践中的标准方案)
非对称加密 + 对称加密
text
RSA / ECC → 交换 AES 密钥
AES → 加密真实数据
HTTPS、TLS、主流 API 通信全是这套逻辑。
三、Python 中最常用的加密算法详解
实战中,推荐使用
cryptography库(工业标准)
bash
pip install cryptography
四、AES:对称加密的绝对主力
1️⃣ AES 是什么?
- 高级加密标准(Advanced Encryption Standard)
- 支持 128 / 192 / 256 位密钥
- 目前没有被实用破解
2️⃣ Python 中的 AES(示例)
以 AES-GCM(强烈推荐) 为例:
python
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
import os
key = AESGCM.generate_key(bit_length=256)
aesgcm = AESGCM(key)
nonce = os.urandom(12)
data = b"secret data"
aad = b"header"
ciphertext = aesgcm.encrypt(nonce, data, aad)
plaintext = aesgcm.decrypt(nonce, ciphertext, aad)
print(plaintext)
3️⃣ 为什么推荐 AES-GCM?
- 同时提供:
- 机密性(Encryption)
- 完整性(Authentication)
- 避免 ECB / CBC 常见安全坑
4️⃣ AES 适用场景
| 场景 | 是否适合 |
|---|---|
| 数据库存储敏感字段 | ✅ |
| 文件 / 配置加密 | ✅ |
| 服务间通信 | ✅ |
| 大数据量加密 | ✅ |
五、RSA:非对称加密的经典方案
1️⃣ RSA 的定位
- 不适合直接加密大数据
- 非常适合:
- 密钥交换
- 数字签名
2️⃣ Python 中的 RSA 示例
python
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import hashes
private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048,
)
public_key = private_key.public_key()
ciphertext = public_key.encrypt(
b"secret",
padding.OAEP(
mgf=padding.MGF1(hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
plaintext = private_key.decrypt(
ciphertext,
padding.OAEP(
mgf=padding.MGF1(hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
print(plaintext)
3️⃣ RSA 适用场景
| 场景 | 是否适合 |
|---|---|
| HTTPS / TLS | ✅ |
| API 密钥交换 | ✅ |
| 数字签名 | ✅ |
| 大文件加密 | ❌ |
六、ECC:更现代的非对称加密
为什么越来越多系统用 ECC?
- 同等安全强度下:
- 密钥更短
- 速度更快
- 移动端、云原生系统非常友好
常见用途
- ECDH(密钥交换)
- ECDSA / EdDSA(签名)
如果你不是做底层密码系统,直接用 TLS / HTTPS 即可,ECC 已被内置使用。
七、算法对比速览表
| 算法 | 类型 | 速度 | 典型用途 |
|---|---|---|---|
| AES-GCM | 对称 | ⭐⭐⭐⭐⭐ | 数据加密 |
| RSA | 非对称 | ⭐⭐ | 密钥交换 |
| ECC | 非对称 | ⭐⭐⭐ | 签名 / 交换 |
| 混合加密 | 组合 | ⭐⭐⭐⭐ | 网络通信 |
八、工程选型建议(很重要)
✅ 正确姿势
- 存数据 → AES
- 传数据 → HTTPS(混合加密)
- 接口验签 → RSA / ECC
- 密钥管理 → KMS / 环境变量 / 硬件
❌ 常见错误
- ❌ 用 RSA 直接加密文件
- ❌ 自己实现 AES 填充、模式
- ❌ 用 ECB 模式
- ❌ 把密钥写进代码仓库
九、一句话总结
AES 是干活的,RSA/ECC 是交换钥匙的。
真实世界里,加密从来不是单算法,而是"组合拳"。