python - 如何从 yaml 文件中读取 cryptography.fernet 生成的加密 key 作为字符串?

标签 python yaml python-cryptography

我在 python (tkinter) 中有一个用户界面,它使用 cryptography.fernet 来加密用户的密码并将其存储在 yaml 文件中。出于密码恢复的目的,我还将生成的加密 key 保留在 yaml 文件中。

我的问题是加密 key 在 yaml 文件中以 (!!binary) 前缀存储。当我想读回它以使用它来恢复密码时,yaml.load() 方法将 key 转换为我不想要的二进制格式。

这是credentials.yml文件的内容:

encryption_key: !!binary |
  Rkl5ZVFTQnZhNG1LcVhsSU1LV3FUZzNETGVRcWx0VTQyMzFyRDJlTWR4UT0=
username: Jack
encrypted_password: gAAAAABlXhuUZimgsD1eN7gLZpfzvxKc4Bz9fIPmVhWvwGoKkaUiSWOSf7gkFJBM8XRU-kgn37kKH3KC2XTz-CHLVX2PFerckQ==

这是我的 python 代码:

import yaml
from cryptography.fernet import Fernet

with open("credentials.yml", 'r') as file:
    yaml_data = yaml.load(file)

print(yaml_data['encryption_key'])

代码的输出为:b'FIyeQSBva4mKqXlIMKWqTg3DLeQqltU4231rD2eMdxQ='

但我想要这个:Rkl5ZVFTQnZhNG1LcVhsSU1LV3FUZzNETGVRcWx0VTQyMzFyRDJlTWR4UT0=

有什么方法可以将原始格式的加密 key 转储到 yaml 文件中吗?或者有什么方法可以将其转换回非二进制格式?

最佳答案

这只是 Base64

>>> b = b'FIyeQSBva4mKqXlIMKWqTg3DLeQqltU4231rD2eMdxQ='
>>> import base64
>>> base64.b64encode(b)
b'Rkl5ZVFTQnZhNG1LcVhsSU1LV3FUZzNETGVRcWx0VTQyMzFyRDJlTWR4UT0='

关于python - 如何从 yaml 文件中读取 cryptography.fernet 生成的加密 key 作为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77542044/

相关文章:

python - 在 C++ Cmake 中运行 Python 代码找不到 PyUnicode_FromString

go - 忽略 YAML 标签

python-3.x - Openssl:0 深度查找时出现错误 20:无法获取本地颁发者证书

ruby - 有没有办法在 Ruby YAML 文件中指定 ruby​​ 类/模块常量作为值

php - 使用 symfony4 和 doctrine 设置多个数据库时如何修复在两个数据库上运行的迁移

cryptography - 我可以在 AES-GCM 中发送未加密的随机数吗?

python - 如何使用 AES 256 实现 Fernet 加密

python - 使 Python 脚本在 MAMP 上运行

python - 绘制微分方程特解的 Sympy 结果

python - 无法让 Scrapy 返回 Div 中的文本