本章目标
通过本章学习,你将能够:
- 理解常见的加密与安全编程原理
- 掌握 Python 内置与第三方加密库的使用
- 实现数据的对称加密、非对称加密与哈希
- 学习常见的认证机制与安全传输方式
- 构建安全的应用程序和数据处理流程
1. 哈希与摘要算法
哈希函数用于验证数据完整性。
import hashlib
msg = "hello world".encode()
md5_val = hashlib.md5(msg).hexdigest()
sha256_val = hashlib.sha256(msg).hexdigest()
print("MD5:", md5_val)
print("SHA256:", sha256_val)
应用场景:密码存储(需加盐)、数据校验。
2. 对称加密(AES)
使用 cryptography 库进行 AES 加密。
from cryptography.fernet import Fernet
key = Fernet.generate_key()
cipher = Fernet(key)
msg = b"secret data"
ct = cipher.encrypt(msg)
print("加密后:", ct)
print("解密后:", cipher.decrypt(ct))
应用场景:数据库字段加密、本地文件保护。
3. 非对称加密(RSA)
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import hashes, serialization
# 生成密钥对
private_key = rsa.generate_private_key(public_exponent=65537, key_size=2048)
public_key = private_key.public_key()
# 加密
msg = b"secret"
ct = public_key.encrypt(
msg,
padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None)
)
# 解密
dt = private_key.decrypt(
ct,
padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None)
)
print(dt)
应用场景:密钥交换、数字签名。
4. 数字签名
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding
signature = private_key.sign(
b"important data",
padding.PSS(mgf=padding.MGF1(hashes.SHA256()), salt_length=padding.PSS.MAX_LENGTH),
hashes.SHA256()
)
# 验证签名
public_key.verify(
signature,
b"important data",
padding.PSS(mgf=padding.MGF1(hashes.SHA256()), salt_length=padding.PSS.MAX_LENGTH),
hashes.SHA256()
)
应用场景:身份认证、防篡改。
5. 安全传输(TLS/SSL)
- 使用 ssl 模块在 socket 上启用加密:
import ssl, socket
context = ssl.create_default_context()
with socket.create_connection(("example.com", 443)) as sock:
with context.wrap_socket(sock, server_hostname="example.com") as ssock:
print(ssock.version())
应用场景:HTTPS、加密通信。
6. 常见安全实践
- 密码存储:使用 bcrypt 哈希 + 加盐
- 输入校验:避免 SQL 注入与 XSS
- 安全随机数:secrets 模块
import secrets
print(secrets.token_hex(16))
7. 安全架构设计
- 分层:应用层 -> 加密层 -> 传输层
- 日志:敏感信息脱敏存储
- 审计:记录关键操作日志
- 工具:结合 OpenSSL、Vault 管理密钥
8. 练习题
- 使用 hashlib 编写一个带盐的密码哈希函数。
- 使用 cryptography 实现 AES 文件加密与解密工具。
- 使用 RSA 实现一个简单的数字签名与验证程序。
- 使用 ssl 构建一个简单的 HTTPS 客户端。
小结
本章介绍了 Python 中的安全与加密编程技术,包括哈希、AES、RSA、数字签名、TLS 通信与安全实践。掌握这些技术,你可以为应用程序构建更强的安全保障。