常见加密算法全解析 2025 | 哈希、对称、非对称(附 Python 代码)
2025/9/8...大约 4 分钟
深入解读常见加密算法:原理 · 代码 · 场景
在这个高度数字化的时代,数据安全是基础设施的“隐形守护”。本文将带你从 哈希 到 对称,进而到 非对称加密,以简洁语言、清晰结构引导你理解这些算法的本质及应用,同时附上实用 Python 代码示例。
一、算法分类一览
我们所说的“加密算法”实则可细分为三类:
类型 | 核心特点 | 常见用途 |
---|---|---|
哈希算法 | 单向不可逆(明文 → 哈希值) | 校验、密码存储、签名基础 |
对称加密 | 加密和解密使用同一个密钥(速度快) | 文件加密、数据传输、本地存储 |
非对称加密 | 使用公钥加密、私钥解密(密钥分发更安全,但速度慢) | 安全通信、密钥交换、数字签名 |
二、哈希算法:不可逆的数据指纹
原理简述
哈希算法将任意长度输入映射为固定长度输出(“散列值”),常用于验证数据完整性与密码存储。
Python 示例(SHA-256)
import hashlib
def hash_sha256(text: str) -> str:
return hashlib.sha256(text.encode('utf-8')).hexdigest()
print("SHA-256:", hash_sha256("hello"))
注意:避免使用 MD5 和 SHA-1,它们已被证明存在碰撞风险。
应用场景
- 文件下载校验
- 用户密码存储(结合 “盐” 更安全)
- 区块链数据完整性验证
三、对称加密:共享密钥的高速护盾
算法精粹
对称加密(如 AES、DES)使用相同的密钥执行加解密,处理效率高但需安全的密钥交换。
Python 示例(AES-128 + EAX 模式)
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
import base64
def aes_encrypt_decrypt_demo():
key = get_random_bytes(16)
cipher = AES.new(key, AES.MODE_EAX)
pt = b"Secret message"
ct, tag = cipher.encrypt_and_digest(pt)
print("Ciphertext:", base64.b64encode(ct))
cipher2 = AES.new(key, AES.MODE_EAX, nonce=cipher.nonce)
print("Decrypted:", cipher2.decrypt(ct).decode())
aes_encrypt_decrypt_demo()
场景示例
- 本地磁盘或文件加密
- 数据库字段(如身份证号、银行卡号)加密
- 高速通信加密(如 VPN、内网传输)
四、非对称加密:公钥与私钥的安全协奏
为什么需要它?
非对称加密(RSA、ECC)通过公钥加密、私钥解密的方式,解决了对称加密中密钥分发难题,虽然速度较慢,但更适合关键数据交换。
Python 示例(RSA 2048 位 + OAEP 填充)
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
def rsa_encrypt_decrypt_demo():
key = RSA.generate(2048)
pub = key.publickey()
cipher = PKCS1_OAEP.new(pub)
pt = b"Hello RSA"
ct = cipher.encrypt(pt)
print("Ciphertext:", ct)
cipher2 = PKCS1_OAEP.new(key)
print("Decrypted:", cipher2.decrypt(ct).decode())
rsa_encrypt_decrypt_demo()
典型应用
- HTTPS/TLS 握手阶段的密钥协商
- 数字签名与身份验证
- 证书颁发与公钥基础设施(PKI)
五、三者协作的安全方案:以 HTTPS/TLS 为例
在实际应用中,单一算法往往无法满足多种安全需求。以 HTTPS/TLS 为例:
- 使用 非对称加密(如 RSA)安全交换对称密钥。
- 使用 对称加密(如 AES)加密后续所有数据通信。
- 使用 哈希算法(如 SHA-256)确保数据完整性并防止篡改。
这三者的组合形成了一套既高效又安全的通信机制。
六、总结提炼
- 哈希:生成唯一摘要,用于校验与存储,但不可逆。
- 对称加密:高效但需安全的密钥分发。
- 非对称加密:安全的密钥管理与身份验证机制。
- 组合使用:是实用加密系统(如 TLS)的核心思路。
七、实践建议
- 密码存储请结合“盐”使用强哈希(如 bcrypt、Argon2)。
- 加密大量数据时优先选用对称算法。
- 需要跨网络沟通密钥时,引入非对称算法以保证安全。
- 混合使用不同加密手段,构建完整安全链条。