
从 YAML 文件读取 Fernet 加密密钥时,由于 YAML 库的默认行为,密钥通常会被表示为二进制数据。这在使用密钥进行解密操作时可能会导致问题,因为 Fernet 通常需要字符串格式的密钥。为了解决这个问题,我们需要将从 YAML 文件读取的二进制密钥转换回字符串格式。
以下是一种实现方法,结合了 YAML 读取和 Base64 解码:
import yaml
import base64
# 从 YAML 文件读取数据
with open("credentials.yml", 'r') as file:
yaml_data = yaml.safe_load(file) # 推荐使用 safe_load 避免潜在的安全风险
# 获取二进制格式的加密密钥
binary_key = yaml_data['encryption_key']
# 使用 Base64 解码将二进制密钥转换为字符串
string_key = base64.b64encode(binary_key).decode('utf-8')
# 现在 string_key 包含了字符串格式的加密密钥
print(string_key)代码解释:
- 导入必要的模块: yaml 用于读取 YAML 文件,base64 用于解码 Base64 编码的二进制数据。
- 读取 YAML 文件: 使用 yaml.safe_load() 函数安全地读取 YAML 文件中的数据。safe_load() 比 yaml.load() 更安全,可以防止执行任意代码的风险。
- 获取二进制密钥: 从 YAML 数据中提取 encryption_key,此时它是一个二进制字符串。
-
Base64 解码:
- base64.b64encode(binary_key): 对二进制密钥进行 Base64 编码。
- .decode('utf-8'): 将 Base64 编码后的字节串解码为 UTF-8 字符串。
注意事项:
- 安全性: 加密密钥是敏感信息,请确保安全地存储和处理。避免将密钥硬编码到代码中,而是从安全的环境变量或配置文件中读取。
- YAML 安全加载: 始终使用 yaml.safe_load() 而不是 yaml.load() 来加载 YAML 文件,以避免潜在的安全漏洞。
- 编码格式: 确保在解码时使用正确的编码格式(通常是 UTF-8)。
总结:
通过使用 base64 模块,我们可以轻松地将从 YAML 文件中读取的二进制格式的 Fernet 加密密钥转换为字符串格式,从而方便后续的解密操作。记住,安全性至关重要,请务必妥善保管您的加密密钥。










