Pyhton常用的加密和hash算法
已于 2025年05月20日 13:00 修改
访问次数:0
非常好,这份总结已经清晰地介绍了哈希函数在 Web 开发中的应用场景。为了进一步完善内容,我们可以对文中提到的**“加密算法”补充它们的基本特性**,包括:
- 哈希 vs 加密的区别
- 哈希算法特性
- 对称加密算法
- 非对称加密算法
- HMAC 的类型和原理
🔐 一、哈希算法 vs 加密算法(概念区别)
| 类型 | 定义 | 是否可逆 | 常用算法 |
|---|---|---|---|
| 哈希(Hash) | 将任意长度输入转换为固定长度输出 | ❌ 不可逆 | MD5, SHA-256, bcrypt |
| 加密(Encryption) | 将明文变为密文,需要密钥解密还原 | ✅ 可逆 | AES, RSA |
🔁 二、哈希算法的特性(密码/签名专用)
| 特性 | 说明 |
|---|---|
| 单向性(不可逆) | 输入无法从输出中还原 |
| 雪崩效应 | 输入稍有不同,输出完全不同 |
| 抗碰撞性 | 不同输入不应生成相同哈希 |
| 确定性 | 相同输入必然产生相同输出 |
| 快速计算 | 计算速度快(除少数如 bcrypt 故意变慢) |
✅ 三、密码存储常用哈希算法(详解)
| 算法 | 类型 | 加盐 | 是否慢速 | 是否推荐 | 说明 |
|---|---|---|---|---|---|
MD5 / SHA1 | 哈希 | ❌ | ❌ | ❌ 不推荐 | 太快,容易被暴力破解 |
bcrypt | 哈希(专为密码) | ✅ 自动加盐 | ✅ 慢 | ✅ 推荐 | 广泛支持,Django 默认 |
PBKDF2 | 哈希(键导出函数) | ✅ | ✅ 慢 | ✅ 推荐 | Django 内置支持 |
argon2 | 哈希(现代方案) | ✅ | ✅ 慢 | ✅ 强烈推荐 | 被认为是最安全的密码哈希方案 |
🔐 四、HMAC(消息认证码)
| 项目 | 说明 |
|---|---|
| 类型 | 哈希+密钥的组合,属于对称认证机制 |
| 是否可逆 | ❌ 不可逆 |
| 用途 | API 签名、Webhook 认证、防篡改 |
| 算法示例 | HMAC-SHA256、HMAC-SHA1 |
| 安全性 | 基于哈希算法安全性,推荐用 SHA-256 或更高 |
hmac.new(secret_key, message, hashlib.sha256).hexdigest()
🔑 五、对称加密算法(Symmetric Encryption)
| 算法 | 简介 | 用途 | 特点 |
|---|---|---|---|
| AES(高级加密标准) | 现代对称加密标准 | 数据传输、存储加密 | 快速、安全,常用于 HTTPS、JWT 加密等 |
| DES / 3DES | 旧标准,已弃用 | - | 安全性不够 |
- 特征: 加密/解密使用同一个密钥 速度快,适合加密大量数据 必须保护密钥(泄漏则安全性丧失)
🔐 六、非对称加密算法(Asymmetric Encryption)
| 算法 | 简介 | 用途 | 特点 |
|---|---|---|---|
| RSA | 最常用的非对称加密算法 | SSL/TLS、数字签名 | 公钥加密,私钥解密 |
| ECC(椭圆曲线加密) | 更小密钥,更高效率 | JWT、移动设备加密 | 相比 RSA 更轻量 |
- 特征: 公钥加密,私钥解密 私钥签名,公钥验签 通常用于身份认证、数据交换密钥协商(如 HTTPS)
🔍 七、快速汇总对照表
| 场景 | 推荐算法 | 类型 | 可逆 | 特性说明 |
|---|---|---|---|---|
| 密码存储 | bcrypt, argon2 | 哈希 | ❌ 不可逆 | 安全、加盐、防暴力破解 |
| API 签名 | HMAC-SHA256 | 哈希认证码 | ❌ 不可逆 | 对称密钥认证、防篡改 |
| 文件加密 | AES | 对称加密 | ✅ 可逆 | 加密快,但密钥要保护好 |
| 用户身份认证 | RSA | 非对称加密 | ✅ 可逆 | 公钥加密 / 私钥签名 |
| 静态资源版本控制 | MD5 | 哈希 | ❌ 不可逆 | 快速唯一标识,非安全 |
| 数据完整性校验 | SHA-256 | 哈希 | ❌ 不可逆 | 文件一致性校验 |
| 去重判断 | MurmurHash | 哈希 | ❌ 不可逆 | 快速,适用于布隆过滤器 |
如需我补充每种算法的使用示例或代码片段(如 AES 加密/解密、JWT 签名、argon2 密码存储),可以告诉我,我可以帮你补齐代码部分。
评论(0)