一、代码模块解析
from cryptography.fernet import Fernet
import base64
class SecureCommunicator:
def __init__(self, key=None):
self.key = key or Fernet.generate_key() # 生成或接收预定义密钥:ml-citation{ref="1,2" data="citationList"}
self.cipher = Fernet(self.key) # 初始化加密器对象:ml-citation{ref="1,3" data="citationList"}
def encrypt(self, data):
return self.cipher.encrypt(data.encode()) # 将字符串编码为字节并加密:ml-citation{ref="1,3" data="citationList"}
def decrypt(self, encrypted_data):
return self.cipher.decrypt(encrypted_data).decode() # 解密后解码为字符串:ml-citation{ref="1,3" data="citationList"}
def save_key(self, filename):
with open(filename, "wb") as f:
f.write(base64.urlsafe_b64encode(self.key)) # 密钥经Base64编码后存储:ml-citation{ref="1" data="citationList"}
二、功能实现说明
-
密钥管理
- 密钥生成:若未提供密钥,则通过
Fernet.generate_key()
生成随机密钥(默认128位)。 - 密钥存储:使用
base64.urlsafe_b64encode
对密钥进行URL安全编码,避免二进制存储导致的格式问题。
- 密钥生成:若未提供密钥,则通过
-
加密与解密流程
- 加密过程:输入文本通过
.encode()
转为字节流,再调用encrypt()
生成密文。 - 解密过程:密文通过
decrypt()
还原为字节流,再通过.decode()
转为明文。
- 加密过程:输入文本通过
-
兼容性设计
- 支持自定义密钥传入,便于跨系统密钥复用。
- Base64编码确保密钥在文件存储和网络传输中的可读性。
三、使用示例
comm = SecureCommunicator() # 创建实例并自动生成密钥
secret = comm.encrypt("Top Secret Message") # 加密明文
print("解密结果:", comm.decrypt(secret)) # 输出: 解密结果: Top Secret Message
- 输出验证:加密-解密闭环验证数据完整性。
四、技术关联与扩展
功能 | 实现库/方法 | 应用场景 | 优化建议 |
---|---|---|---|
对称加密 | cryptography.Fernet | 安全通信、数据存储 | 结合非对称加密提升安全性 |
密钥编码 | base64.urlsafe_b64encode | 密钥持久化 | 使用硬件安全模块(HSM)管理密钥 |
五、安全性注意事项
- 密钥保护:密钥文件需设置权限限制(如
chmod 600
),防止未授权访问。 - 算法强度:Fernet基于AES-128-CBC和HMAC-SHA256,适用于敏感数据保护。