对于自动化项目,我必须保留用户ID /密码以允许我的脚本连接到远程服务。
我的想法是使用keyring模块来实现更好的安全级别;但并非所有平台都支持密钥环;我正在考虑将凭证存储到平面文件中。我创建了一个“凭据”类;并认为使用$relault
我可以转储/加载该类的对象,如:
pickle
不幸的是,这个文件以纯文本形式提供了密码:
def _store_to_file(credentials):
from pickle import dump
pkl = open('whatever.dat', 'wb')
dump(credentials, pkl)
pkl.close()
我理解由本地脚本存储的文件不提供真正的安全性。但我希望至少要达到这样一个程度,即只需要一个简单的“less whatever.dat”来获取密码文本。
我曾希望泡菜有某种“争夺”模式;但找不到任何东西。我忽略了什么吗?
另外:是否有另一种方法可以轻松地保留我的对象,但不是那种“易于阅读的”?
答案 0 :(得分:3)
一个简单的解决方案;根据Keef Baker的评论---使用AES加密来加密密码/用户名;像这样:
class Credentials(object):
def __init__(self, user, password):
self._user = aes.encrypt(user)
self._password = aes.encrypt(password)
@property
def user(self):
return aes.decrypt(self._user)
@property
def password(self):
return aes.decrypt(self._password)
from Crypto.Cipher import AES
aes = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456')
答案 1 :(得分:1)
你不应该。
尝试保留密钥的安全加密副本的应用程序中的问题只是他们需要另一个密钥来解密它。它也可以加密,还需要另一个密钥。它可能......(抱歉开玩笑:-))。只有在存储多个机密时才有意义,因为您只需一个密码即可解锁安全保险库 - 密钥环和密码管理器会做什么......
对于一个单一密码,正确且可移植的方式是依靠操作系统来提供安全文件夹。 Linux(和类似Unix)并且提供访问控制规则(仅对用户可访问)或加密文件夹(如果您需要更高的安全性)。只需记录它并尊重single responsibility principle。