【问题标题】:Storing passwords with python用python存储密码
【发布时间】:2011-04-11 03:11:42
【问题描述】:

我有一个用 python 编写的程序,我需要存储一些密码。这些密码将成为 ftp 服务器的密码,因此重要的是它们不仅对每个人都清晰可见。这也意味着我不能像在网络服务器上那样存储密码的不可逆哈希,因为我不是在检查是否有人输入了正确的密码,我只是将密码转发给其他人。
那么存储密码的最佳方式是什么?我正在使用 python,该程序将是 linux-only。

【问题讨论】:

标签: python passwords storage


【解决方案1】:

您可以使用系统的密钥环,例如GNOME 钥匙圈或 KDE 钱包。

有一个名为 keyring 的 Python 模块支持多个密钥环提供程序。我只在 Windows 上尝试过,它还不能正常工作。似乎开发不是很活跃,但是您应该尝试一下。您也可以尝试使用 GNOME 专用的包“python-gnomekeyring”和更底层的包。

【讨论】:

  • 谢谢,这正是我要保护我的 python 脚本的方法:)
  • 我给了keyring 一个快速旋转,它似乎工作得很好。您能否重新审视您的答案,或者更坚定地支持keyring(或者如果您找到了更好的模块),或者更具体地详细说明您发现的不适用于它吗?
  • 我已经在 OS X 和 Windows 上测试了keyring,它似乎在每个平台上都能完美运行。我还检查了实现(因为它是纯 Python,这很容易),我看不到任何关于它的内容。
【解决方案2】:

根据发行版的不同,如果有可用的钥匙串,您可能可以将其存储在钥匙串中。

否则,请查看一些可用的加密算法(PGP/GPG、DES、AES 等)及其 Python 端口/模块,但这是您必须正确解决的难题。

【讨论】:

  • 是的,使用操作系统提供的服务,而不是自己编写。
  • 如果你使用 PGP 或 AES 或其他什么,你不必在 python 脚本中存储密码来解码密码,那么有人可以打开 python 源文件并读取密钥来解码密码?
  • 如果您将该密码设为用户输入,则不会。一个密码即可记住所有密码 :-) 或者您也可以使用没有密码短语的密钥文件。我不知道他的安全需要多高。
  • 如果密码是 userinput ... 那么您需要将明文存储在文件中,以便用户可以使用他们的自定义密钥对其进行加密
【解决方案3】:

有一种方便且不安全的方法:只需将它们存储为纯文本,如果您真正使用 FTP(而不是,例如 SFTP),那么它们将与托管它们的机器一样安全(这意味着不是很安全)。 FTP 是在通过网络发送明文密码被认为“足够安全”的时候编写的;那些时光已逝。即使在 python 源代码中编码明文密码也不能真正帮助你,因为在某些时候你必须取消编码它们。

安全方法需要更多设置。这是decent tutorial,我希望有更好的。

【讨论】:

    【解决方案4】:

    在 Linux 上查看 netrc(使用 man 或 this),然后查看 this Python module

    如果 netrc 有适当的信息,您可以在命令行中使用 ftp 而无需输入用户名和密码——它们会在文件中查找。需要注意的一些事项:该文件仅限于用户读/写(0600),否则可能会被 ftp 拒绝。如果可行,那么您就可以在 Python 中使用它了。

    一个更好的主意是完全避免 ftp(密码以纯文本形式发送)并使用 sftp。将您的公钥从运行 Python 脚本的机器复制到每台目标机器,让 ssh 以安全的方式自动为您登录。

    【讨论】:

      【解决方案5】:

      我建议对密码进行哈希处理,哈希是一种单向函数,因此无法返回以找到密码的纯文本版本(与加密不同)。

      MD5 是我喜欢的一种算法,并且已经在 Python 中实现了。您可以随时在哈希中添加盐,例如 abdPasswordABDA,其中 Password 是密码。然后将哈希存储在文件或数据库中,并在检查之前再次对其进行哈希处理。 SHA1 是您可以使用的另一种散列算法。

      【讨论】:

      • 他不能使用哈希,因为他提供的是密码,而不是检查密码。
      • 除了使用散列密码进行身份验证之外无济于事,因为这些仍然可以访问您的数据库。
      • 我没有投票,但这个答案获得了 -4 可能是因为提到的两种散列算法对于密码散列来说是一个糟糕的选择。他们太快了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-09
      • 2011-04-18
      • 1970-01-01
      • 2010-09-08
      • 2012-05-31
      • 1970-01-01
      相关资源
      最近更新 更多