4

我的 python 脚本(Python 2.6,在 Debian Linux 上)要求用户输入密码,然后将其保存在用户主目录中。

因为我不想将密码保存为纯文本,所以我想以某种方式对其进行加密。所以我想也许我可以使用用户的(私有)ssh-key 来加密和解密保存在文件中的密码,这样只有有权访问私有 ssh 密钥的人才能解密保存的密码。

为此使用私有 ssh 密钥是个好主意吗?如何使用密钥加密python中的字符串?

(顺便说一句,我不想​​使用钥匙圈之类的东西)

编辑

好的,我明白使用用户 ssh 密钥来处理类似的事情是个坏主意。相反,我现在只使用 base64 编码,如下所述: 如何使用 Python 编码和解码字符串以在 URL 中使用? 当然,当有人阅读我的 python 脚本时,它不会保存。但这对我来说已经足够了,不必将密码保存为纯文本。

4

2 回答 2

5

唯一值得做的事情是存储只有用户可以阅读的文件。

您使用 ssh 密钥的论点似乎类似于以下内容:

  1. 我需要存储密码,所以我会加密它
  2. 如果我使用用户的 ssh 密钥进行加密,这将防止有人解密密码,即使他们有我的脚本的来源,因为只有用户可以读取他们的 ssh 密钥。

如果您将加密密码存储在只有用户可以读取的文件中,您将获得与使用 ssh 密钥相同的好处,而无需费心阅读用户的 ssh 密钥。

我同意不以纯文本形式存储密码以防止有人像root这样做那样登录有一些好处:

cat secret-password

要获取密码,但请记住,很容易在 Python 脚本中找到以下内容:

password = decrypt-password(data)

并添加以下行:

print "The user's password is",password

类似的东西os.fchown()可以保护文件,就像首先创建具有正确权限的文件一样。

您可以对密码base64进行编码,使其不是纯文本,但如果我们假设攻击者可以读取和编辑您的脚本,那么唯一可以保护用户的是攻击者无法读取包含加密密码的文件。

如果您真的担心这一点,只需在每次运行脚本时提示用户输入密码。

于 2010-11-12T13:28:11.643 回答
2

Is it a good idea to use the private ssh key for this?

不:

  • 私钥本身可以受密码保护。
  • 阅读用户的密钥是一种糟糕的形式。
  • 它可以在不考虑您的脚本的情况下进行更改。

你似乎也在混淆你的术语。你用过encoding,当我假设你的意思是decodingand时。hashingencryptingdecrypting

正如 Dave Webb 指出的那样,您的前提是私钥文件对用户是只读的,并且本身没有加密。您将从“受文件系统用户只读保护”变为“受用户只读的不同文件保护”。

于 2010-11-12T13:35:34.857 回答