我的python脚本(Debian Linux上的Python 2.6)要求用户输入密码,然后将其保存在用户主目录中。
因为我不想将密码作为纯文本保护,所以我想以某种方式对其进行加密。所以我想也许我可以使用用户的(私有)ssh-key来加密和解密保存在文件中的密码,这样只有访问私有ssh密钥的人才能解密保存的密码。
为此使用私有ssh密钥是个好主意吗?如何在python中使用密钥加密字符串?
(顺便说一下,我不想使用密钥环和类似的东西)
修改
好的,我理解使用用户ssh密钥这样的东西是个坏主意。 相反,我现在只使用base64编码,如下所述: How does one encode and decode a string with Python for use in a URL? 当有人读我的python脚本时,当然不能保存。但它对我来说足够了,不必将密码保存为纯文本。
答案 0 :(得分:5)
唯一值得做的就是存储只有用户可以阅读的文件。
您使用ssh密钥的论点似乎如下:
如果您将加密密码存储在文件中,只有用户可以阅读,您可以获得与使用ssh密钥相同的好处,而无需费心阅读用户的ssh密钥。
我同意不以纯文本格式存储密码以防止有人以root
身份登录时有一些好处:
cat secret-password
获取密码但请记住,在Python脚本中找到以下内容的行很容易说:
password = decrypt-password(data)
并添加以下行:
print "The user's password is",password
像os.fchown()
之类的东西可以保护文件,就像创建具有正确权限的文件一样。
您可以base64
encode密码,因此它不是纯文本,但如果我们假设攻击者可以读取和编辑您的脚本,则唯一可以保护用户的是攻击者无法读取包含该文件的文件加密密码。
如果您真的担心这一点,只需在每次运行脚本时提示用户输入密码。
答案 1 :(得分:2)
Is it a good idea to use the private ssh key for this?
没有
您似乎也在混淆您的术语。我假设您的意思是encoding
和decoding
时,您已使用hashing
,encrypting
和decrypting
。
正如Dave Webb所指出的那样,你的前提是私钥文件对用户是只读的而不是自己加密的。您将从“受文件系统用户只读保护”到“受用户只读的不同文件保护”。