【发布时间】:2017-09-01 11:34:48
【问题描述】:
对于自动化项目,我必须保留用户 ID/密码以允许我的脚本连接到远程服务。
我的想法是使用keyring 模块来实现更好的安全级别;但并非所有平台都支持密钥环;我也在考虑将凭据存储到平面文件中。我创建了一个“凭据”类;并认为使用pickle 我可以转储/加载该类的对象,例如:
def _store_to_file(credentials):
from pickle import dump
pkl = open('whatever.dat', 'wb')
dump(credentials, pkl)
pkl.close()
不幸的是,这个文件以纯文本形式泄露了密码:
S'_password'
p6
S'bla'
我了解由本地脚本存储的文件并不能提供真正的安全性。但我希望至少能达到这样一个点,即需要一个简单的“lesswhatever.dat”来获取密码文本。
我曾希望 pickle 有某种“争夺”模式;但找不到任何东西。我忽略了什么吗?
或者:是否有另一种方法可以轻松地持久化我的对象,但不是那么“易于人类阅读”?
【问题讨论】:
-
老实说,我会使用
bcrypt创建一个加密和解密函数,然后将base64 编码的加密密码存储到您的pickle 文件中。 -
所以在腌制之前打乱数据
-
@KeefBaker 除非我弄错了:bcrypt 只允许我散列密码。但稍后我需要 纯文本 中的密码。换句话说:我需要一些能给我 encrypt() 和 decrypt() 功能的东西;像带有 rot13 的编解码器。但可能比 rot13 难 10% ;-)
-
我的错,我以为我在我的项目中使用了 bcrypt。我实际上在使用
from Crypto.Cipher import AES